本文共 3630 字,大约阅读时间需要 12 分钟。
上两篇文章中主要讲述了jenkins相关的东西,作者比较笨,在使用ssh执行命令和文件复制上感觉太难。所以作者开发了easy-jenkins-deploy组件来发布项目和执行一些脚本,而且这些脚本都是可以由开发人员定义的。组件由服务端和客户端组成。其中服务端和jenkins在一起部署,客户端部署到目标机器上,可以针对不同的环境和机器部署客户端。
easy-jenkins-deploy的缺点:通过执行请求就可发布和执行dos或shell指令,具有一定风险性。所以easy-jenkins-deploy适合比较单纯的使用。
服务端Jserver的启动
在启动jserver的时候,需要创建jenkins打包之后的文件缓存地址。但是这个地址是前端传过来的。您需要约定,比如D:pipeline,启动脚本可以参考如下:
java -jar -Dserver.port=8081 jserver.war
客户端启动
由于在部署的时候一般需要将老版本进行保留,所以需要在启动的时候指定项目的缓存地址和历史版本库。启动命令可参考如下:
java -jar -Dserver.port=8081 -Dcom.scaffold.easy.jenkins.folder=D:/deploy -Dcom.scaffold.easy.jenkins.repostory=D:/deploy/repository jserver.war
其中的配置解释
# 上传的项目缓存地址,如果没有该目录,会自动创建com.scaffold.easy.jenkins.folder=D:/deploy# 项目的历史备份地址,备份的项目会带上时间 ,若没有会自动创建com.scaffold.easy.jenkins.repostory=D:/deploy/repository
jenkins的配置
在项目整合了jenkins2.0的pipline之后,您需要安装Http request组件。并在项目的jenkinsfile文件平齐的目录中创建execute.bat或者execute.sh文件,脚本文件是在目标主机上执行的指令,如下为参考。
for /f "tokens=1" %%a in ('jps ^| findstr JXmlEditor.war') do taskkill /f /pid %%acd JAVA_HOMEset TARGET_PATH=D:\okms-java\xmleditor\JXmlEditor.warset javawpath=%JAVA_HOME%\bin\cd %javawpath%c:start /b javaw -jar -Dserver.port=9309 -Dspring.profiles.active=prod %TARGET_PATH%jpsexit
其中的TARGET_PATH为项目的部署的文件夹,是必须要指定值的!
在设置好上述步骤之后,在Jenkinsfile中编写Http request请求。
pipeline { agent any triggers{ GenericTrigger( token:'XmlEditor' ) } stages { stage('Build') { steps { echo '1.start build.....' bat 'mvn clean -Dmaven.test.skip=true package -Pprod' echo 'end build' #这里的E:pipeline就是服务端的打包缓存地址 bat 'XCOPY *.bat E:\\pipeline /y \n cd target\n dir \n XCOPY JXmlEditor.war E:\\pipeline /y' } } stage('Test') { steps { echo 'Testing..' } } stage('Deploy') { steps { script { def toJson = { input -> groovy.json.JsonOutput.toJson(123) } def body = [ status: "DOWN" ] # 这里发起对easy-jenkins-deploy服务端的调用, # commandPath表示执行脚本的地址, # javafilePath表示java生成包的地址。 # saveOld表示是否要保留历史版本, # targetServer表示要向那个机器进行部署。 # 作者害怕斜杠地址会被转义,就用下划线替换了。最后发现目标主机是可以传递的。这个下个版本再改吧! def unregister_url= "http://localhost:8081/jserver/task/deploy?commandPath=E:_pipeline_execute.bat&javafilePath=E:_pipeline_JXmlEditor.war&saveOld=true&targetServer=http://10.120.130.26:8082/jclient/upload" response = httpRequest consoleLogResponseBody: true, contentType: 'APPLICATION_JSON', httpMode: 'GET', requestBody: toJson(body), url: unregister_url, validResponseCodes: '200' println('Status: '+response.status) println('Response: '+response.content) } } } }}
这里对传递的参数进行一下说明:
# 这里发起对easy-jenkins-deploy服务端的调用, # commandPath表示执行脚本的地址, # javafilePath表示java生成包的地址。 # saveOld表示是否要保留历史版本, # targetServer表示要向那个机器进行部署。 # 作者害怕斜杠地址会被转义,就用下划线替换了。最后发现目标主机是可以传递的。这个下个版本再改吧! def unregister_url= "http://localhost:8081/jserver/task/deploy?commandPath=E:_pipeline_execute.bat&javafilePath=E:_pipeline_JXmlEditor.war&saveOld=true&targetServer=http://10.120.130.26:8082/jclient/upload"
作者通过实验,发现该组件能够在window环境上正常运行,目前还没有在linux环境做部署,但大概率没问题。通过一天的开发和验证。作者负责的项目已经使用了该组件。并能够正常打包发布,在对多环境的发包上,该组件可能具有一定的优势!
该项目已经开源,发布第一天就收获三颗starter,希望该组件能够帮到和我一样不愿意使用SSH的同学。希望大家提出您宝贵的意见。
https://github.com/tianjingle/easy-jenkins-deploy
转载地址:http://ilkmi.baihongyu.com/