当前位置: 首页 > 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;但电商收入占销售总额的比例…...

CLAP-htsat-fused部署指南:Docker资源限制与OOM Killer规避策略

CLAP-htsat-fused部署指南&#xff1a;Docker资源限制与OOM Killer规避策略 1. 项目概述 CLAP-htsat-fused是一个基于LAION CLAP模型的零样本音频分类Web服务。这个工具能够对任意音频文件进行语义分类&#xff0c;无需预先训练特定类别的模型。无论是狗叫声、猫叫声、鸟叫声…...

从A*到Hybrid A*:FastPlanner如何解决无人机路径搜索的动力学约束问题

从A到Hybrid A&#xff1a;FastPlanner如何解决无人机路径搜索的动力学约束问题 在无人机自主导航领域&#xff0c;路径规划算法需要同时考虑环境障碍物规避和飞行器的动力学特性。传统A算法虽然能解决静态环境的最短路径问题&#xff0c;却无法处理四旋翼无人机这类具有复杂动…...

Qwen3.5-9B-AWQ-4bit电路仿真辅助:Multisim设计文档自动生成

Qwen3.5-9B-AWQ-4bit电路仿真辅助&#xff1a;Multisim设计文档自动生成 1. 电子工程师的文档痛点 硬件设计工程师每天都要面对一个耗时又不得不做的工作——撰写电路设计文档。从电路原理说明到元器件清单&#xff0c;从测试步骤到注意事项&#xff0c;这些文档不仅要求专业…...

Filter下固定块半导体设备PP精密加工案例 | 莱图加工程师实录

本次案例来自一家半导体微电子设备制造企业的委托加工需求&#xff0c;零件为Filter下固定块&#xff0c;作为莱图加承接的半导体设备零件加工项目之一&#xff0c;该零件在湿法工艺设备、晶圆清洗设备或化学液过滤系统中承担Filter组件的下部固定与支撑功能。Filter下固定块&a…...

原生 JS 实现图片预览上传组件:多图上传 + 拖拽上传 + 裁剪预览 + 进度显示(附完整源码)

前言图片上传是前端开发中高频且核心的功能场景&#xff0c;如头像上传、素材管理、表单提交等。本文基于原生 HTMLCSSJavaScript 实现一套企业级图片预览上传组件&#xff0c;包含多图选择、拖拽上传、实时预览、图片裁剪、上传进度显示、文件大小 / 格式校验等功能&#xff0…...

分享我用稳卖AI浏览器实操出来的:AI选品降低试错成本思路

很多跨境卖家都有类似经历&#xff1a;一个产品在决定要不要做的时候&#xff0c;表面上看信息不少&#xff0c;但真正落到“为什么选它”这个问题上&#xff0c;判断依据往往并不够扎实。有时候是看到某个平台趋势不错&#xff0c;有时候是看到竞品最近销量有变化&#xff0c;…...

避开这5个坑!DataV大屏开发中的常见问题与性能优化指南

避开这5个坑&#xff01;DataV大屏开发中的常见问题与性能优化指南 在零售行业数字化转型的浪潮中&#xff0c;实时数据监控大屏已成为企业决策的"神经中枢"。DataV作为阿里云推出的专业级数据可视化工具&#xff0c;凭借其丰富的组件库和灵活的配置能力&#xff0c;…...

读了50篇文献还是理不清脉络?百考通AI 5分钟生成有主线、有批判的文献综述

在高校学术写作中&#xff0c;文献综述是连接已有研究与创新探索的关键桥梁。它不仅体现作者对领域现状的掌握程度&#xff0c;更直接影响后续研究的深度与可行性。然而&#xff0c;对许多学生而言&#xff0c;撰写一篇专业、规范、有逻辑的综述常常令人望而却步——资料庞杂、…...

Limine混合ISO制作教程:BIOS/UEFI双启动镜像的完整流程

Limine混合ISO制作教程&#xff1a;BIOS/UEFI双启动镜像的完整流程 【免费下载链接】limine Modern, advanced, portable, multiprotocol bootloader and boot manager. 项目地址: https://gitcode.com/gh_mirrors/li/limine Limine是一款现代化、先进的可移植多协议引导…...

ACM模式

学习视频&#xff1a; 一个视频讲明白ACM模式&#xff01;_哔哩哔哩_bilibili 输入 data list(map(int,input.split())) 假设你在键盘上输入了这样一行数字&#xff1a;10 20 30&#xff0c;然后按了回车。 第一层&#xff08;最里面&#xff09;&#xff1a;input() 动作&…...