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_profilebox_build.sh $APP master $PROJECT_NAME""" } else { if (params.TAG == ''){ error("回滚操作必须指定tag版本") } sh """ source ~/.bash_profilebox_build.sh $APP master $PROJECT_NAME $TAG""" } } } } stage('deploy'){ steps { sh """ source ~/.bash_profileboxcli --env=$DEPLOYENV publish --app=$APP""" } } stage('tag') { steps { script { if (params.OP == 'publish') { sh """ source ~/.bash_profilecd ~/pkgs/src/$PROJECT_NAMEgit tag $VERSIONgit 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的可回滚发布模式
大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。 发布…...
golang worker channel 模式
大概流程就是job -> JobQueue调度器循环获取JobQueue ,获取到的job ,再去异步获取等待可用的 worker,取出 chan Job,将job 写入改worker的 chan Jobworker 处理任务,先处理 case job : <-w.JobChannel: 处理完成后再将 chan…...
舔狗日记之好一条舔狗
闲来没事,爬了下vx《舔狗日记》,感觉挺有意思的,分享出来给大家看看。 PS:仅供娱乐,侵删。 舔狗2023 舔狗日记 2023年10月11日 晴天 你们根本不懂舔狗的快乐。被舔的人,无法预知接下来会不会继续被舔&…...

【地理位置识别】IP归属地应用的特点
IP归属地应用是一类用于确定特定IP地址的地理位置信息(通常是城市、地区或国家)的工具和服务。以下是IP归属地应用的几个主要特点: 地理位置识别: IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…...
华为实验基础(2):路由器基础
一、路由器的分类 1、从功能、性能和应用方面划分: (1) 骨干路由器 :骨干路由器是实现主干网络互连的关键设备,通常采用模块化结构,通过热备 份、双电源和双数据通路等冗余技术提高可靠性 ,华…...
婚姻管理系统-使用bbst数据结构
使用到希尔排序和归并排序,文件存储 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> //名字的最大长度 #define NameMax 30 //全局的文件指针变量 FILE* file, * file_admin, * file_divorce; /…...
软件架构的概念
1.软件架构演化 为了适应用户的新需求、业务环境和运行环境的变化等,软件架构需要不断地进行自身的演化,也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲,软件架构的演化就是软件整体结构的演化,演化过程涵盖…...
kubernetes存储-secrets
一、从文件创建 二、编写yaml文件 三、将Secret挂载到Volume中 四、向指定路径映射 secret 密钥 五、将Secret设置为环境变量 六、存储docker registry的认证信息...

Springboot使用EasyExcel导入导出Excel文件
1,准备Excel文件和数据库表结果 2,导入代码 1,引入依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifac…...

Pytorch L1,L2正则化
L1正则化和L2正则化是常用的正则化技术,用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。 L1正则化(Lasso正则化): 正则化项形式:L1正则化使用模型参数的绝对值之和作为正则化…...

【Elasticsearch 未授权访问漏洞复现】
文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布&am…...
pytorch笔记:PackedSequence对象送入RNN
pytorch 笔记:PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN(如LSTM或GRU)时,RNN内部会进行特定的操作来处理这种特殊的输入形式。 使用PackedSequ…...
C#WPF工具提示(ToolTip)实例
本文演示C#WPF工具提示(ToolTip)实例 ToolTip ToolTip是当鼠标移到某个控件上后可以弹出提示的控件 属性说明 1、HasDropShadow 决定工具提示是否具有扩散的黑色阴影,使其和背后的窗口区别开来 2、Placement 使用PlacementMode枚举值决定如何放置工具提示。默认值是M…...

智慧矿山系统中的猴车安全监测与识别
智慧矿山是近年来兴起的一种采用人工智能(AI)技术的矿山管理方式,它通过利用智能传感设备和先进算法来实现对矿山环境和设备进行监测和管理,从而提高矿山的安全性和效率。在智慧矿山的AI算法系列中,猴车不安全行为识别…...

网络协议--TCP连接的建立与终止
18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将详细讨论一个TCP连接是如何建立的以及通信结束后是如何终止的。 这种两端间连接的建立与无连接协议如UDP不同。我们在第11章看到一端使用UDP向另一端发…...

react条件渲染
目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中,条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…...
Docker中Failed to initialize NVML: Unknown Error
参考资料 Docker 中无法使用 GPU 时该怎么办(无法初始化 NVML:未知错误) SOLVED Docker with GPU: “Failed to initialize NVML: Unknown Error” 解决方案需要的条件: 需要在服务器上docker的admin list之中. 不需要服务器整体的admin权限.…...

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!
目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2.单样本秩和检验 四、结果解读第一,假设检验摘要第二,Wilcoxon符号检验结果摘要。第三,Wilcoxon符号秩检验图第四,数…...
ttkefu在线客服在客户联络领域的价值
随着互联网的快速发展,越来越多的企业开始注重在线客服的应用。ttkefu作为一款智能在线客服系统,在客户联络领域中展现出了巨大的价值。本文将详细介绍ttkefu在线客服在客户联络领域的应用优势、专家分析以及未来发展趋势。 一、ttkefu在线客服简介 tt…...

创新方案|2023如何用5种新形式重塑疫后实体门店体验
在电商盛行的当下,线上购物已成为新零售的重要组成部分,实体零售业正处于两难境地。一方面,实体零售是绝对有必要的:美国约 85% 的销售额来自实体商店。 另一方面,尽管增长放缓,但电商收入占销售总额的比例…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...