首页 > 其他分享 >jenkins实践篇(2)—— 自动打tag的可回滚发布模式

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

时间:2023-11-01 18:11:59浏览次数:33  
标签:回滚 git 插件 sh tag jenkins pipeline

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

发布与回滚思路

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

Pasted image 20231020172438.png

具体操作步骤

下面介绍下详细的步骤

Jenkins安装git Parameter 插件

要想出现tag模式的参数,需要安装git Parameter 插件,在Jenkins的Manage Jenkins→Plugins→Available 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

标签:回滚,git,插件,sh,tag,jenkins,pipeline
From: https://www.cnblogs.com/hobbybear/p/17803773.html

相关文章

  • [Jenkins] openEuler Embedded CI 报错及解决方案汇总
    [Jenkins]CI报错及解决方案汇总1org.codehaus.groovy.control.MultipleCompilationErrorsException:startupfailed:WorkflowScript:24:unexpectedchar:'\'@line24,column51.-e/usr1/build/output\最后的“\”原本表示换行,但现在被认为是错误......
  • 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
    前言   但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子。假如一个项目,由A、B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端。A和B都习惯使用SVN作为代码管理工具,他们分别开始工作,一个功能完成后会提交到SVN,以便对......
  • Windows系统上禁用Jenkins跨站请求伪造(CSRF)保护功能
    禁用CSRF保护为了在Jenkins中禁用CSRF保护,请按照以下步骤操作:定位Jenkins服务在Windows搜索栏中输入services.msc,然后按Enter键打开服务。在服务列表中找到Jenkins服务。右键点击Jenkins服务,选择属性。修改Jenkins配置文件在Jenkins服务属性窗口中,找到路径到可执行......
  • datagridview消除自动生成的第一列
     方法:属性中 RowHeadersVisible设置为False效果: ......
  • Jenkins+Docker 一键自动化部署 SpringBoot 项目
    Jenkins和Docker是现代软件开发中非常流行的工具,可以帮助我们自动化构建、测试和部署应用程序。SpringBoot是一种流行的Java框架,可以帮助开发人员快速开发Web应用程序。在本文中,我们将介绍如何使用Jenkins和Docker一键自动化部署SpringBoot应用程序。准备工作首先,你需要安装并配......
  • 【Pipeline】Jenkins流水线中如何使用全局变量
    例如我们在stage1中利用script代码块设置赋值了一个变量,然后想在stage2中使用。应该怎么操作呢?https://stackoverflow.com/questions/53541489/updating-environment-global-variable-in-jenkins-pipeline-from-the-stage-level/53541813https://www.youtube.com/watch?v......
  • 【Pipeline】Jenkins流水线parallel并行构建
    位于parallel块下的阶段都将并行执行,而且并行阶段还可以被分到不同的Jenkinsagent上执行。在默认情况下,Jenkinspipeline要等待parallel块下所有的阶段都执行完成,才能确定结果。如果希望所有并行阶段中的某个阶段失败后,就让其他正在执行的阶段都中止,那么只需要在与parallel块同......
  • 0.Jenkins设置为中文
    方式1:安装Locale插件1.1安装 1.1修改系统配置项,注意前面安装完需要重启Jenkins服务 方式2:安装汉化包并重启jenkins在上面插件不生效的情况下采用。 ......
  • centos 7 + JDK 1.8.0_381+jenkins-2.346.3-1.1环境搭建与安装
    一.查询JDK版本与Jenkins版本对应关系:https://pkg.jenkins.io/redhat-stable/二.centos7安装JDK1.8版本略三.下载并安装jenkinswgethttps://repo.huaweicloud.com/jenkins/redhat-stable/jenkins-2.346.3-1.1.noarch.rpmrpm-ivhjenkins-2.346.3-1.1.noarch.rpm四.......
  • Jenkins忘记管理员密码
    一、删除Jenkins配置文件config.xml的如下内容重启Jenkins后发现不用密码可以直接登录二、启用安全域系统管理全局安全配置选择Jenkins专有用户数据库并保存三、设置admin密码系统管理→管理用户设置新的密码并保存退出后就可以用新密码登录了—————————......