Gradle学习教程之部署上传项目详解
前言
Gradle,这是一个基于JVM的富有突破性构建工具。Gradle正迅速成为许多开源项目和前沿企业构建系统的选择,同时也在挑战遗留的自动化构建项目。
原先在公司做项目时,写了一个简单的基于gradle部署项目的脚本,今天翻出来记录一下,下面话不多说了,来一起看看详细的介绍吧。
方法如下:
一、build.gradle
buildscript{
ext{
env=System.getProperty("env")?:"test"
jvmArgs="-server-Xms128m-Xmx128m-XX:NewRatio=4-XX:SurvivorRatio=16-XX:MaxTenuringThreshold=15-XX:CMSInitiatingOccupancyFraction=80-XX:+UseConcMarkSweepGC-XX:+CMSClassUnloadingEnabled-XX:+ExplicitGCInvokesConcurrent-XX:+DoEscapeAnalysis-XX:-HeapDumpOnOutOfMemoryError"
if(env=="prod"){
jvmArgs="-server-Xms2g-Xmx2g-XX:NewRatio=4-XX:SurvivorRatio=16-XX:MaxTenuringThreshold=15-XX:CMSInitiatingOccupancyFraction=80-XX:+UseConcMarkSweepGC-XX:+CMSClassUnloadingEnabled-XX:+ExplicitGCInvokesConcurrent-XX:+DoEscapeAnalysis-XX:-HeapDumpOnOutOfMemoryError"
}
userHome=System.getProperty("user.home")
osName=System.getProperty("os.name")
}
repositories{
jcenter()
}
dependencies{
classpath'org.hidetake:gradle-ssh-plugin:2.7.0'
classpath'co.tomlee.gradle.plugins:gradle-thrift-plugin:0.0.6'
}
}
allprojects{
applyplugin:'idea'
applyplugin:'eclipse'
applyplugin:'org.hidetake.ssh'
group='com.mwee.information.core'
version='1.0-SNAPSHOT'
ssh.settings{
timeoutSec=60
knownHosts=allowAnyHosts
}
defaultTasks'clean','copyPartDependencies'
//排除Log4j依赖
configurations{
compile.excludemodule:'slf4j-log4j12'
compile.excludemodule:'org.apache.logging.log4j'
compile.excludemodule:'log4j'
all*.excludegroup:'org.apache.logging.log4j'
all*.excludegroup:'log4j'
}
}
subprojects{
applyplugin:'java'
sourceCompatibility=1.8
targetCompatibility=1.8
repositories{
mavenLocal()
maven{url"http://114.80.88.52:9001/nexus/content/groups/public/"}
}
sourceSets{
main{
java{
srcDirs=['src/main/java']
}
resources{
srcDirs=["src/main/resources","src/main/profile/$env"]
}
}
}
dependencies{
compile("org.codehaus.groovy:groovy-all:2.2.1")
compile'org.codehaus.groovy:groovy-backports-compat23:2.4.5'
compile("org.springframework.boot:spring-boot-starter-web:1.4.2.RELEASE")
compile("org.apache.commons:commons-lang3:3.4")
compile("org.apache.commons:commons-collections4:4.1")
compile"org.apache.commons:commons-pool2:2.4.2"
compilegroup:'com.alibaba',name:'fastjson',version:'1.2.12'
//https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compilegroup:'com.fasterxml.jackson.core',name:'jackson-databind',version:'2.8.6'
//https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
compilegroup:'com.fasterxml.jackson.core',name:'jackson-core',version:'2.8.6'
compilegroup:'org.aspectj',name:'aspectjrt',version:'1.8.7'
compilegroup:'org.aspectj',name:'aspectjweaver',version:'1.8.7'
compilegroup:'com.thoughtworks.xstream',name:'xstream',version:'1.4.1'
compile(group:'org.mortbay.jetty',name:'jetty',version:'6.1.26')
compilegroup:'org.projectlombok',name:'lombok',version:'1.16.8'
compilegroup:'com.squareup.okhttp',name:'okhttp',version:'2.7.5'
compilegroup:'com.google.guava',name:'guava',version:'18.0'
compilegroup:'commons-lang',name:'commons-lang',version:'2.6'
compilegroup:'com.jcraft',name:'jsch',version:'0.1.53'
testCompilegroup:'junit',name:'junit',version:'4.12'
testCompile"org.springframework:spring-test:4.3.4.RELEASE"
compile"javax.validation:validation-api:1.1.0.Final"
compile"org.hibernate:hibernate-validator:5.2.4.Final"
}
//gradleutf-8compile
tasks.withType(JavaCompile){
options.encoding='UTF-8'
}
taskcopyAllDependencies(type:Copy,dependsOn:jar){
description="拷贝全部依赖的jar包"
fromconfigurations.runtime
into'build/libs'
}
taskcopyPartDependencies(type:Copy,dependsOn:jar){
description="拷贝部分依赖的jar"
fromconfigurations.runtime
into'build/libs'
doLast{
file("build/libs").listFiles({!it.name.endsWith("-SNAPSHOT.jar")}asFileFilter).each{
it.delete()
}
}
}
}
二、对应模块下的build.gradle
defmainClass="com.hzgj.information.rest.user.run.UserServiceProvider"
defappHome="/home/appsvr/apps/rest_user"
defjavaCommand="nohupjava$jvmArgs-Djava.ext.dirs=$appHome/libs-Denv=$env$mainClass>$appHome/shell.log2>&1&"
defindex=System.getProperty("index")
defremote=remotes{
test_0{
role'test_0'
host='10.0.21.152'
if(file("$userHome/.ssh/id_rsa").exists()){
user='appsvr'
identity=file("$userHome/.ssh/id_rsa")
}else{
user='appsvr'
password='xxx'
}
}
test_1{
role'test_1'
host='10.0.146.20'
if(file("$userHome/.ssh/id_rsa").exists()){
user='appsvr'
identity=file("$userHome/.ssh/id_rsa")
}else{
user='appsvr'
password='xxx'
}
}
home{
role'home'
host='192.168.109.130'
user='appsvr'
password='xxx'
//identity=file('id_rsa')
}
}
taskdeploy<<{
description="拷贝jar包并启动java服务"
defroles=remote.findAll{
defcurrentEnv=index==null?"$env":"$env"+"_"+index
it['roles'][0].toString().contains(currentEnv)
}
ssh.run{
roles.each{
defrole=it['roles'][0].toString()
session(remotes.role(role)){
try{
execute("ls$appHome")
}catch(Exceptione){
println("#############目录[$appHome]不存在,将自动创建############")
execute("mkdir-p$appHome")
}
finally{
defr='$1'
defpid=execute("jps-l|grep'$mainClass'|awk\'{print$r}\'")
if(pid){
execute("kill-9$pid")
}
putfrom:'build/libs',into:"$appHome"
println("###############准备启动java服务[$javaCommand]####################")
execute("$javaCommand")
sleep(10000)
pid=execute("jps-l|grep'$mainClass'|awk\'{print$r}\'")
if(pid){
println("#####$mainClass[$pid]启动成功...######")
execute("rm-f$appHome/shell.log")
}else{
println("#$mainClass启动失败...输出日志如下:#")
execute("cat$appHome/shell.log")
}
}
}
}
}
}
taskstop<<{
defroles=remote.findAll{
defcurrentEnv=index==null?"$env":"$env"+"_"+index
it['roles'][0].toString().contains(currentEnv)
}
ssh.run{
roles.each{
session(remotes.role("$env")){
defr='$1'
defpid=execute("jps-l|grep'$mainClass'|awk\'{print$r}\'")
if(pid){
execute("kill-9$pid")
}
}
}
}
}
taskstart<<{
defroles=remote.findAll{
defcurrentEnv=index==null?"$env":"$env"+"_"+index
it['roles'][0].toString().contains(currentEnv)
}
ssh.run{
roles.each{
defrole=it['roles'][0].toString()
session(remotes.role(role)){
defr='$1'
defpid=execute("jps-l|grep'$mainClass'|awk\'{print$r}\'")
if(pid){
execute("kill-9$pid")
}
println("###############准备启动java服务[$javaCommand]####################")
execute("$javaCommand")
sleep(10000)
pid=execute("jps-l|grep'$mainClass'|awk\'{print$r}\'")
if(pid){
println("#$mainClass[$pid]启动成功...#")
execute("rm-f$appHome/shell.log")
}else{
println("#$mainClass启动失败...输出日志如下:#")
execute("cat$appHome/shell.log")
}
}
}
}
}
三、使用方式
1.先运行gradlecopyAll-xtest进行打包操作,该操作会将该模块所有的依赖的jar
2.进入到对应的模块下运行gradledeploy-Denv=xxx-Dindex=xxx,什么意思呢?-Denv代表哪一个环境-Dindex指定该环境下哪个节点进行发布
3.gradlestart-Denv=xxx-Dindex=xxx运行当前环境下的应用
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。