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 ...
随机推荐
- PJzhang:exiftool图片信息提取工具和短信接口调用工具TBomb
猫宁!!! 作者:Phil Harvey 这是图片信息提取工具的地址: https://sno.phy.queensu.ca/~phil/exiftool/ 网站隶属于Sudbury 中微子天文台,从 ...
- pytest.mark.parametrize()参数化的应用一
from page.LoginPage import Loginpage import os, sys, pytest base_dir = os.path.dirname(os.path.dirna ...
- 【VS开发】文件共享内存2
在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模 ...
- 最新 前程无忧java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.前程无忧等10家互联网公司的校招Offer,因为某些自身原因最终选择了前程无忧.6.7月主要是做系统复习.项目复盘.Leet ...
- linux中alarm函数和pause函数详解实例
alarm(time);执行之后告诉内核,让内核在time秒时间之后向该进程发送一个定时信号,然后该进程捕获该信号并处理:pause()函数使该进程暂停让出CPU,但是该函数的暂停和前面的那个slee ...
- Django用户认证模块中继承AbstractUser与AbstractBaseUser重写User表的区别
AbstractUser和AbstractBaseUser看起来十分相似,如果你不熟悉djiango的auth重写User,那你很容易弄错,导致一堆bug. 我们查看AbstractUser的源码得知 ...
- echarts中国地图描绘
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8&qu ...
- 《MIT 6.828 Lab 1 Exercise 7》实验报告
本实验链接:mit 6.828 lab1 Exercise 7. 题目 Exercise 7. Use QEMU and GDB to trace into the JOS kernel and st ...
- poj3304(叉积判断直线和线段相交)
题目链接:https://vjudge.net/problem/POJ-3304 题意:求是否能找到一条直线,使得n条线段在该直线的投影有公共点. 思路: 如果存在这样的直线,那么在公共投影点作直线的 ...
- kafka 名词解释及原理解析过程(三)
为什么要了解这些名词的解释呢?因为在学一个新的知识或者领域的时候,我们需要知道它所定义的概念和名词意思,因为只有这样我们才能理解和掌握这个新的知识点,才能更加系统的掌握这个技术. 一.名词解释 1.b ...