首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

​jenkins实践篇(2)—— 自动打tag的可回滚发布模式

!! 大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。

发布与回滚思路

正常功能发布时,是基于master分支发布的,所以我在成功发布后,会将当时的master分支自动打上tag,当需要回滚时,则基于tag分支进行发布即可。如下图所示,当op选择rollback时则需要去选择tag的版本。

Pasted image 20231020172438.png具体操作步骤

下面介绍下详细的步骤

Jenkins安装git Parameter 插件

要想出现tag模式的参数,需要安装git Parameter 插件,在Jenkins的Manage JenkinsPluginsAvailable Plugins 中安装 ,安装完成后在项目的配置页的This project is parameterized 中可以看到选项,

Pasted image 20231020174847.png

Pasted image 20231020175019.png

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

Pasted image 20231020175203.png安装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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OhyMvAriLHLqsVba4Q-CVngg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券