easy-jenkins-deploy简介和使用

上两篇文章中主要讲述了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文件,脚本文件是在目标主机上执行的指令,如下为参考。

easy-jenkins-deploy简介和使用_第1张图片

for /f "tokens=1" %%a in ('jps ^| findstr JXmlEditor.war') do taskkill /f /pid %%a
cd JAVA_HOME
set TARGET_PATH=D:\okms-java\xmleditor\JXmlEditor.war
set javawpath=%JAVA_HOME%\bin\
cd %javawpath%
c:
start /b javaw -jar -Dserver.port=9309 -Dspring.profiles.active=prod %TARGET_PATH%
jps
exit

其中的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

easy-jenkins-deploy简介和使用_第2张图片

你可能感兴趣的:(java,docker,linux,大数据,zookeeper)