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 ...
随机推荐
- python基础--list
定义list-->l=[] stus=['张三','李四','王五'] list增删改查 #增 stus.append('狄仁杰')#增加---append在list末尾增加一个元素 stus. ...
- js或者jquery直接下载网页上的图片代码
1.jquery方式 使用jquery直接下载图片 function downloadImage(src) { var a = $("<a></a>").a ...
- Flutter 贝塞尔曲线切割
现在人们对于网站的美感要求是越来越高了,所以很多布局需要优美的曲线设计.当然最简单的办法是作一个PNG的透明图片,然后外边放一个Container.但其内容如果本身就不是图片,只是容器,这种放入图片的 ...
- Fabric1.4 背书策略 .yam文件
{ identities: [ // 以下几项自动编号为[0,1,2] { role: { name: "member", mspId: "peerOrg1" ...
- 【FFMPEG】Ubuntu上安装FFMPEG
在之前,我们成功地使用mingw+msys在Windows平台下编译FFmpeg(见 http://www.linuxidc.com/Linux/2014-11/109839.htm),并生成了ffp ...
- uva11624 Fire! (bfs预处理)
题目链接:https://vjudge.net/problem/UVA-11624 题意:给一个1000×1000的矩阵,有几个着火点和Joe,着火点和Joe每个单位时间均移动一个单位,求Joe逃出的 ...
- appium+python教程1
Python3+Appium安装使用教程 一.安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在 ...
- 【浅析C++11】std::function和std::bind
目录 std::function可调用对象包装器 std::function基本用法 std::function/std::bind与抽象工厂.工厂方法的一点思考 std::function可调用对象 ...
- CSP/NOIP c++常用模板
蒟蒻目前还是提高组选手,模板将会持续更新! 目录: 线段树 对拍 exgcd st 树状数组 树剖 dijsktra spfa tarjan 匈牙利 埃筛 差分树状数组 dinic 快速幂取余 Exg ...
- 落网数据库简单查询接口 caddy+php7+mongodb
落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...