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 ...
 
随机推荐
- hibernate  第二次深入接触
			
1.session 到底如何进行脏处理? 当一个Dept对象加入到session缓存时,Session会为Dept对象的值属性复制一份快照,当Session刷新缓存时,会进行脏处理. 2.OID 用来 ...
 - EasyNetQ使用(五)【基于主题的路由,控制队列名称】
			
RabbitMQ有一个很酷的功能,基于主题的路由,这个功能允许订阅者基于多个条件去过滤消息.一个主题是由点号分隔的单词列表,随消息一同发布.例如:“stock.usd.nyse” 或 “book.uk ...
 - [PyTorch] Facebook Research - Mask R-CNN Benchmark 的安装与测试
			
Github项目链接:https://github.com/facebookresearch/maskrcnn-benchmark maskrcnn_benchmark 安装步骤: 安装Anacond ...
 - leetcode907 Sum of Subarray Minimums
			
思路: 对于每个数字A[i],使用单调栈找到A[i]作为最小值的所有区间数量,相乘并累加结果.时间复杂度O(n). 实现: class Solution { public: int sumSubarr ...
 - 最新 浪潮java校招面经 (含整理过的面试题大全)
			
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.浪潮等10家互联网公司的校招Offer,因为某些自身原因最终选择了浪潮.6.7月主要是做系统复习.项目复盘.LeetCode ...
 - react新特性hook
			
一.hook示例. import React, { useState } from 'react'; function Example() { // 声明一个叫 “count” 的 state 变 ...
 - sysconf获取系统参数
			
头文件: #include <unistd.h> 原型:long sysconf(int sysnum); 示例: #include <stdio.h> #include &l ...
 - Python基础学习路径
			
1. Python数据结构 1. 基本数据类型(整数.小数.字符) 1.基本数据类型有5种:int bool float complex long 2.每一种数据类型该如何定义 3.数据类型之间可以强 ...
 - error LNK2001: unresolved external symbol __imp__closesocket@4
			
环境:Visual C++6.0 问题:链接错误 描述: Linking... NetSrv.obj : error LNK2001: unresolvedexternal symbol __imp_ ...
 - 20190716-Python网络数据采集/第 2 章 复杂HTML解析
			
# P29/9# 解析,要考虑到可持续性问题,对方反爬修改后,仍继续有效,方为优秀代码# 解析一个目标网页前,需要做到以下几点:(1)明确目标内容:(2)寻找“打印此页”的链接,或查看网站有无HTML ...