jenkins实践篇(2)—— 自动打tag的可回滚发布模式
大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。
发布与回滚思路
正常功能发布时,是基于master分支发布的,所以我在成功发布后,会将当时的master分支自动打上tag,当需要回滚时,则基于tag分支进行发布即可。如下图所示,当op选择rollback时则需要去选择tag的版本。

具体操作步骤
下面介绍下详细的步骤
Jenkins安装git Parameter 插件
要想出现tag模式的参数,需要安装git Parameter 插件,在Jenkins的Manage Jenkins→Plugins→Available Plugins 中安装 ,安装完成后在项目的配置页的This project is parameterized 中可以看到选项,


配置了这个还没完,因为jenkins还需要知道是从哪个git仓库获取tag,所以在下面的源码管理部分(SCM) 需要配置git地址。

安装Version Number 插件
接着因为要自动给仓库打上tag,所以这里涉及到tag的取名规则,我用了一个Version Number 的插件,它能够获取到当天的年,月,日数据,我可以利用它来为tag进行取名,来看下写pipeline脚本时如何用上,
pipeline {
agent any
environment {
PROJECT_NAME = 'project1'
GIT_URL = 'https://git.xxxx.git'
VERSION = VersionNumber versionPrefix:'prod.', versionNumberString: '${BUILD_DATE_FORMATTED, "yyyyMMdd"}.${BUILDS_TODAY}'
}
parameters {
choice(name:'OP',choices:'publish\nrollback',description: 'publish(发布新版本时选择,部署后自动生成新tag) rollback(回滚时选择,需要同时选择回滚的tag)')
choice(name:'DEPLOYENV',choices:'prod',description: '部署环境')
gitParameter (branch:'', branchFilter: 'origin/(.*)', defaultValue: 'master', description: '选择将要构建的标签', name: 'TAG', quickFilterEnabled: false, selectedValue: 'TOP', sortMode: 'DESCENDING_SMART', tagFilter: '*', type: 'PT_TAG', useRepository: env.GIT_URL)
choice(name:'APP',choices:'app1\app2',description: '应用名')
}
stages{
stage('build'){
steps {
script {
if (params.OP == 'publish') {
sh """
source ~/.bash_profile
box_build.sh $APP master $PROJECT_NAME
"""
} else {
if (params.TAG == ''){
error("回滚操作必须指定tag版本")
}
sh """
source ~/.bash_profile
box_build.sh $APP master $PROJECT_NAME $TAG
"""
}
}
}
}
stage('deploy'){
steps {
sh """
source ~/.bash_profile
boxcli --env=$DEPLOYENV publish --app=$APP
"""
}
}
stage('tag') {
steps {
script {
if (params.OP == 'publish') {
sh """
source ~/.bash_profile
cd ~/pkgs/src/$PROJECT_NAME
git tag $VERSION
git push --tags
"""
}
}
}
}
}
}
如上述代码所示,VERSION 变量就是最后的tag 名,最后类似于prod.20231020.1 这样的结构,最后的.1 代表的是当天build的次数。 其中编译和部署的stage里面是调用了我们公司自己的编译和发布脚本,这个每个公司的都不太一样,可自行修改。最后发布成功后,在最后一个阶段也就是tag 阶段,我们会自动堆项目打上tag。
在上述pipeline脚本中,我在parameters 指令中定义了gitParameter 以及其他参数,所以不用再到jenkins的界面去定义相关参数了。需要用到的插件在pipeline脚本中如何使用,在插件的官方网址上一般都会说明,照着例子写下来修改其中配置即可。
关于jenkins pipeline的语法可以参考我之前的一片文章 [jenkins 原理篇——pipeline流水线 声明式语法详解] https://mp.weixin.qq.com/s/QD2DwVypIN5-xWxYrAzITw
jenkins实践篇(2)—— 自动打tag的可回滚发布模式的更多相关文章
- Git配合Tag的代码回滚
现有的远程仓库版本的tag为v1.0 前置准备 具体操作: 我们在本地修改一下readme文件,然后进行add,commit操作. 再给我们的commit打上tag git tag -a v1.1 - ...
- jenkins 回滚发布
#jenkins拉取文件路径 workspace=/data/wos/testtemp #备份路径 backspace=/data/wos/back #不能提Git的文件 config=/data/w ...
- jenkins 实现测试发布、预发布、真实发布、回滚发布
主要思路: 1.做三个文件夹,用于放置不可随意修改的配置文件(测试发布.预发布.真实发布) 2.每次都先修改配置文件再进行构建(构建时会先把配置文件复制到构建的目录,再同步到发布的目录) 3.发布完代 ...
- 使用GitLab进行落地项目的管理,并且自动更新、重启、回滚
Gitlab 清空项目历史commit,节省空间 http://blog.csdn.net/dounine/article/details/77840416?locationNum=6&f ...
- 使用Jenkins结合Gogs和SonarQube对项目代码进行测试、部署、回滚,以及使用keepalived+haproxy调度至后端tomcat
0 环境说明 主tomcat:192.168.0.112 备tomcat:192.168.0.183 haproxy+keepalived-1:192.168.0.156 haproxy+keepal ...
- 9.2 k8s结合Jenkins与gitlab实现代码升级与回滚
1.部署Jenkins 1.1 安装jdk # apt 安装jdk11 apt install openjdk-11-jdk # 查看 root@jenkins:~# java -version op ...
- Jenkins实现生产环境部署文件的回滚操作(Windows)
由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...
- kubectl rollout回滚和autoscale自动扩容
系列目录 kubernetes 滚动升级 Kubernetes 中采用ReplicaSet(简称RS)来管理Pod.如果当前集群中的Pod实例数少于目标值,RS 会拉起新的Pod,反之,则根据策略删除 ...
- Kubectl Rollout 回滚及Autoscale自动扩容
Kubectl Rollout 回滚及Autoscale自动扩容 Kubernetes 中采用ReplicaSet(简称RS)来管理Pod.如果当前集群中的Pod实例数少于目标值,RS 会拉起新的Po ...
- jenkins系列(11)-自动打tag升级篇
很久以前,小怪分享过一篇jenkins自动打tag的文章(jenkins系列1--自动打tag),经过在项目实战和改进,我们升级了方案,现在和大家分享.,希望大家在工作中能够用起来. 使用步骤: 1. ...
随机推荐
- 【EF Core】主从实体关系与常见实体关系的区别
上次老周扯了有关主.从实体的话题,本篇咱们再挖一下,主.从实体之间建立的关系,跟咱们常用的一对一.一对多这些关系之间有什么不同. 先看看咱们从学习数据库开始就特熟悉的常用关系--多对多.一对一.一对多 ...
- react项目中使用plop
第一步,安装依赖 npm install plop --dev //或者用yarn yarn add plop --dev 第二步,在package同级目录下新建plopfile.js 这是plop的 ...
- Java stream流使用
1.使用filter()过滤List //查找身高在1.8米及以上的学生 List<StudentInfo> boys = studentList.stream().filter(s-&g ...
- python打包方法
在Python中,要编写setup.py文件,用于构建和打包你的Python项目,你可以遵循以下步骤: 创建项目目录结构:首先,你需要创建项目的目录结构,包括源代码文件.资源文件等.一个常见的项目结构 ...
- 在虚拟机VMware上安装OpenKylin开源操作系统
在虚拟机(VMware)上安装OpenKylin开源操作系统 今天我们一下学习下开放麒麟系统的安装.也是我的开源项目在OpenKylin上运行的实践. 希望通过该项目了解和学习Avalonia开发的朋 ...
- javascript报错: TypeError: (0 , _api_music.default) is not a function
报错截图 错误原因 从其他文件引入变量时,未添加花括号 错误写法 解决方案 效果图 至此问题解决
- ctfshow--web入门--文件上传
ctfshow--web入门--文件上传 web151(前端校验) 题目中提示前端检验不可靠,应该对前端检验进行绕过 检查前端代码进行修改,使php文件可以通过前端校验,成功上传后进行命令执行,找到f ...
- Anaconda+PyCharm+Pytorch/tensorflow环境配置个人总结
Anaconda是一个非常方便的python版本管理工具,可以很方便地切换不同版本的Python进行测试.同时不同版本之间也不存在相互的干扰. PyCharm是一款常见的Python IDE,pyto ...
- Hybrid App 技术路径带动性能的提升
说到 Hybrid App(混合应用)大家都不陌生,因为这种开发模式大行其道发展的这些年取代了很多原生和 Web 应用,为什么大家对这种「Native + HTML5」的开发模式额外偏爱呢? 因为一方 ...
- Sealos 国内集群正式上线,可一键运行 LLama2 中文版大模型!
2023 年 7 月 19 日,MetaAI 宣布开源旗下的 LLama2 大模型,Meta 首席科学家.图灵奖得主 Yann LeCun 在推特上表示 Meta 此举可能将改变大模型行业的竞争格局. ...