博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
easy-jenkins-deploy简介和使用
阅读量:4210 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
c++设计模式之装饰模式
查看>>
Mysql学习笔记(八)- 两个简单实用的优化方法
查看>>
mysql学习笔记(九)- 增删改查的优化
查看>>
Jenkins学习笔记(一)
查看>>
AtomicInteger源码解析
查看>>
CopyOnWriteArraySet源码学习
查看>>
ThreadLocal学习笔记
查看>>
用talib实现基于emv的简易量化投资策略
查看>>
LongAdder源码解析
查看>>
Talib学习笔记(二)- 价格指数学习
查看>>
CAS机制是什么?
查看>>
Semaphore源码解析
查看>>
ConcurrentLinkedDeque源码解析
查看>>
ReentrantLock源码解析
查看>>
StampedLock源码解析
查看>>
ReentrantReadWriteLock源码解析
查看>>
springboot源码解析(四)
查看>>
CompletionService实践
查看>>
YApi在Window上离线安装笔记
查看>>
Mysql学习笔记(十三)查看mysql日志
查看>>