当前位置: 首页 > news >正文

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

大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打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_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 &#xff0c;获取到的job &#xff0c;再去异步获取等待可用的 worker&#xff0c;取出 chan Job,将job 写入改worker的 chan Jobworker 处理任务&#xff0c;先处理 case job : <-w.JobChannel: 处理完成后再将 chan…...

舔狗日记之好一条舔狗

闲来没事&#xff0c;爬了下vx《舔狗日记》&#xff0c;感觉挺有意思的&#xff0c;分享出来给大家看看。 PS&#xff1a;仅供娱乐&#xff0c;侵删。 舔狗2023 舔狗日记 2023年10月11日 晴天 你们根本不懂舔狗的快乐。被舔的人&#xff0c;无法预知接下来会不会继续被舔&…...

【地理位置识别】IP归属地应用的特点

IP归属地应用是一类用于确定特定IP地址的地理位置信息&#xff08;通常是城市、地区或国家&#xff09;的工具和服务。以下是IP归属地应用的几个主要特点&#xff1a; 地理位置识别&#xff1a; IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…...

华为实验基础(2):路由器基础

一、路由器的分类 1、从功能、性能和应用方面划分&#xff1a; &#xff08;1&#xff09; 骨干路由器 &#xff1a;骨干路由器是实现主干网络互连的关键设备&#xff0c;通常采用模块化结构&#xff0c;通过热备 份、双电源和双数据通路等冗余技术提高可靠性 &#xff0c;华…...

婚姻管理系统-使用bbst数据结构

使用到希尔排序和归并排序&#xff0c;文件存储 #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.软件架构演化 为了适应用户的新需求、业务环境和运行环境的变化等&#xff0c;软件架构需要不断地进行自身的演化&#xff0c;也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲&#xff0c;软件架构的演化就是软件整体结构的演化&#xff0c;演化过程涵盖…...

kubernetes存储-secrets

一、从文件创建 二、编写yaml文件 三、将Secret挂载到Volume中 四、向指定路径映射 secret 密钥 五、将Secret设置为环境变量 六、存储docker registry的认证信息...

Springboot使用EasyExcel导入导出Excel文件

1&#xff0c;准备Excel文件和数据库表结果 2&#xff0c;导入代码 1&#xff0c;引入依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifac…...

Pytorch L1,L2正则化

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

【Elasticsearch 未授权访问漏洞复现】

文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&am…...

pytorch笔记:PackedSequence对象送入RNN

pytorch 笔记&#xff1a;PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN&#xff08;如LSTM或GRU&#xff09;时&#xff0c;RNN内部会进行特定的操作来处理这种特殊的输入形式。 使用PackedSequ…...

C#WPF工具提示(ToolTip)实例

本文演示C#WPF工具提示(ToolTip)实例 ToolTip ToolTip是当鼠标移到某个控件上后可以弹出提示的控件 属性说明 1、HasDropShadow 决定工具提示是否具有扩散的黑色阴影,使其和背后的窗口区别开来 2、Placement 使用PlacementMode枚举值决定如何放置工具提示。默认值是M…...

智慧矿山系统中的猴车安全监测与识别

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

网络协议--TCP连接的建立与终止

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

react条件渲染

目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中&#xff0c;条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…...

Docker中Failed to initialize NVML: Unknown Error

参考资料 Docker 中无法使用 GPU 时该怎么办&#xff08;无法初始化 NVML&#xff1a;未知错误&#xff09; SOLVED Docker with GPU: “Failed to initialize NVML: Unknown Error” 解决方案需要的条件: 需要在服务器上docker的admin list之中. 不需要服务器整体的admin权限.…...

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!

目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2&#xff0e;单样本秩和检验 四、结果解读第一&#xff0c;假设检验摘要第二&#xff0c;Wilcoxon符号检验结果摘要。第三&#xff0c;Wilcoxon符号秩检验图第四&#xff0c;数…...

ttkefu在线客服在客户联络领域的价值

随着互联网的快速发展&#xff0c;越来越多的企业开始注重在线客服的应用。ttkefu作为一款智能在线客服系统&#xff0c;在客户联络领域中展现出了巨大的价值。本文将详细介绍ttkefu在线客服在客户联络领域的应用优势、专家分析以及未来发展趋势。 一、ttkefu在线客服简介 tt…...

创新方案|2023如何用5种新形式重塑疫后实体门店体验

在电商盛行的当下&#xff0c;线上购物已成为新零售的重要组成部分&#xff0c;实体零售业正处于两难境地。一方面&#xff0c;实体零售是绝对有必要的&#xff1a;美国约 85% 的销售额来自实体商店。 另一方面&#xff0c;尽管增长放缓&#xff0c;但电商收入占销售总额的比例…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...