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运行当前环境下的应用
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。