jenkins 持续集成笔记2 --- 构建 Java 项目
先说一下流程:
jenkins 从 gitlab 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
jenkins 持续集成笔记2 --- 构建 Java 项目的更多相关文章
- jenkins持续集成:定时构建语法
构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...
- git+jenkins持续集成三-定时构建语法
构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...
- jenkins 持续集成笔记1 --- 安装配置
jenkins 安装 先安装Tomcat,然后下载jenkins war包,启动Tomcat即可 wget https://mirrors.huaweicloud.com/apache/tomcat/ ...
- Jenkins持续集成企业实战
阅读目录: Jenkins持续集成企业实战1.1 目前主流网站部署的流程1.2 Jenkins持续集成简介1.3 Jenkins持续集成组件1.4 Jenkins平台安装部署1.5 Jenkins相关 ...
- Docker+Jenkins持续集成环境(5): android构建与apk发布
项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...
- Jenkins持续集成企业实战系列之Jenkins手动构建-----04
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- 手把手教你利用Jenkins持续集成iOS项目
前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...
- windows部署jenkins持续集成maven测试项目不能访问测试报告
买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...
- 行为驱动:Cucumber + Selenium + Java(二) - extentreports 测试报告+jenkins持续集成
1.extentreports 测试报告 pom文件 <dependency> <groupId>com.vimalselvam</groupId> <art ...
随机推荐
- 1-18-2 LVM管理和ssm存储管理器使用&磁盘配额 (二)
LVM管理和ssm存储管理器使用&磁盘配额 (二) 内容如下: ü LVM快照 ü ssm存储管理器的使用 ü 磁盘配额 第1章 LVM快照 lvm快照:为了保持系统的一致性,我们先做 ...
- Linux运维常见面试题
1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控于一 ...
- 小程序签名MD5加密
最近小程序需求一个签名加密,要把请求参数按键值排序并转化为字符串,然后进行MD5加密. //时间戳 var timestamp = (Date.parse(new Date()))/1000;//签名 ...
- kubernetes版本apiversion简单说明
在使用yaml文件部署Deployment项目时,出现过 error: error validating "xx-Deployment.yaml": error validatin ...
- 【ARM-Linux开发】【Qt开发】Qt Creator自定义编译运行步骤
原文:http://www.linuxidc.com/Linux/2015-04/115763.htm 一直用Qt Creator开发.无它,只是因为linux下C++ IDE选择不多.同时因为我抛弃 ...
- JavaSE基础(十二)--Java 对象和类
Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...
- segi日期计算笔记
计算月末最后一天 /* * 输入年月格式YM(如:201911),输入该月最后一天 */ int monthEndDay(int YM) { int endDay; ; ; == M) { == Y ...
- Java核心1(第三章)
3.6字符串 子串substring(a,b)方法 第二个参数是不想复制的第一个位置 可以从一个较大的字符串中提取一个子串 3.6.2拼接 Java允许使用+号链接两个字符串 3.6.3不可 ...
- Httpwatch教程
启动Httpwatch 从IE的“查看”—“浏览器栏”—“HttpWatch”启动HttpWatch.如下图所示: 以下是HttpWatch程序界面 以下用登录我的邮箱mail.163.com例子来展 ...
- 更新neo4j节点信息
将多个属性的内容更新到节点上 def update_by_id(id,graph,**kwargs): """ 更新节点的属性 根据节点的ID来更新节点的属性,如果存在该 ...