jenkins 持续集成笔记2 --- 构建 Java 项目

先说一下流程:
jenkinsgitlab pull 代码,使用 maven 打包,然后备份原来的jar包,使用rsync同步到服务器上,重启服务。

pipeline 资源去看官方中文文档
https://jenkins.io/zh/doc/#doc/pipeline/tour/getting-started#

讲解下这个jenkins pipeline 。


node {
    stage('Deliver') {
        if (env.Deliver == 'deploy') {
            cleanWs()
			git branch: 'develop', credentialsId: 'a60ae6df-f9e1-4844-809e-852be898f8f9', url: 'http://192.168.1.2/xx-apps/test.git'			
			sh label: '', script: '''cd ${WORKSPACE}/ && mvn clean package -Dmaven.test.skip=true  -Pprod
			ansible micros -m script -a "/root/micros_rsync_add.sh ${JOB_NAME}"
			ansible 172.18.11.150 -m script -a "/data/spring/backup.sh ${JOB_NAME}"
			rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt
			rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.151::${JOB_NAME} --password-file=/etc/passwd.txt
			ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
			sleep 10
			ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
			archiveArtifacts 'target/${JOB_NAME}.jar'
        } else {
            sh label: '', script: '''rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt  
rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt 
ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
sleep 10
ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
        }
    }
}

这是一个 if/else 条件,

env.Deliver == 'deploy'

对应 jenkins 参数化构建过程 --> 选项参数,如图

Build with Parameters选的是 deploy 会执行如下 pipeline 代码:

# 清空当前目录
cleanWs()
# 从 develop 分支拉取代码
git branch: 'develop', credentialsId: 'a60ae6df-f9e1-4844-809e-852be898f8f9', url: 'http://192.168.1.2/xx-apps/test.git'
# sh label: '', script: ''' ''' 这里面全都是 shell 脚本 		
# ${WORKSPACE} 就是这个任务的根目录,即 /root/.jenkins/workspace/test。进到代码所在目录Maven 打包
sh label: '', script: '''cd ${WORKSPACE}/ && mvn clean package -Dmaven.test.skip=true  -Pprod
# 同步机制
ansible micros -m script -a "/root/micros_rsync_add.sh ${JOB_NAME}"
# 备份服务器上的 jar 包
ansible 172.18.11.150 -m script -a "/data/spring/backup.sh ${JOB_NAME}"
# jenkins 的新包同步到服务器上
rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt
rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.151::${JOB_NAME} --password-file=/etc/passwd.txt
# 重启服务 {JOB_NAME} 即 jenkins 的任务名
ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
sleep 10
ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
# 如果构建成功,就存档
archiveArtifacts 'target/${JOB_NAME}.jar'

流程如下:

  • 清空目录
  • pull code 、 构建 jar 包
  • 备份服务器上的 jar 包
  • 用新的 jar 包替换服务器上的 jar 包
  • 重启服务
  • 存档

如果选的是 else,则执行如下代码:

# 这里回滚执行的是 deploy 时的存档
sh label: '', script: '''rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt  
rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.151::${JOB_NAME} --password-file=/etc/passwd.txt 
# 重启服务
ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
sleep 10
ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''

下面截图展示,如何新建一个 JAVA 项目:
Jenkins --> 新建任务

发布

发布成功后:

回滚

version 就是对应 build history 那里的 build id。
比如你这次构建是 11,你要回滚到上一次的,version 那里就填 10

原文地址:https://www.cnblogs.com/fsckzy/p/11855676.html