jenkins实践篇(1)——基于分支的自动发布

问题背景

想起初来公司时,我们还是在发布机上直接执行发布脚本来运行和部署服务,并且正式环境和测试环境的脚本都在一起,直接手动操作脚本时存在比较大的风险就是将环境部署错误,并且当时脚本部署逻辑还没有检测机制,服务部署起来后,还必须登录到对应机器查看服务是否正确启动,整个部署过程可以说是很折磨人了。于是,我开始着手改善这块。

如何优化

第一,整个编译部署过程将不再允许登录到发布机手动执行发布脚本了,这样的风险性比较大,决定采用jenkins来完成编译和发布的工作,这样能让开发者通过界面操作来进行编译部署。

第二,之前脚本缺少检测机制,决定改善脚本,首先在部署前,脚本需要检测对应的服务的配置文件是否符合标准,我们的配置文件是json格式,其次在部署完成后,检测服务是否正常启动,如果没有启动,则尝试再次部署,直到失败3次后将不再重试。

部署模式思考🤔

在决定朝着这两个优化点进行优化后,我开始思考最终的部署模式,测试环境肯定是经常要部署和发布的,而正式环境则不需要经常发布,并且要谨慎发布。

所以我考虑在测试环境做个自动发布的功能,到代码合并到测试环境的分支(测试环境永远用固定的分支名)时,会触发jenkins的webhook机制来自动编译和发布到测试环境。

而对于正式环境而言,则不采用这种机制,为了保证正式环境的安全,还需要保证代码的快速回滚,基于此,正式环境我将采用打tag的方式进行发布,每次发布后会生成一个tag,回滚时则可以基于tag快速回滚。关于tag的发布模式将在下一篇文章再展开,现在我们先来看看如何
基于分支做自动发布。

配置webhook实现自动编译与发布

jenkins 安装 Generic Webhook Trigger 插件

在Jenkins的Manage Jenkins→Plugins→Available Plugins 中安装Generic Webhook Trigger 插件,再去到项目中查看Build Triggers ,就能看到Generic Webhook Trigger选项了。

Pasted image 20231020155700.png

在Generic Webhook Trigger 配置页下方有个token的配置,这个我一般配置成服务名,当配置了token后,到时候gitlab就可以通过url ”http://JENKINS_URL/generic-webhook-trigger/invoke?token=TOKEN_HERE“ 来触发编译工作。

Pasted image 20231020160117.png

gitlab 推送配置

在gitlab中配置特定分支产生push事件时触发jenkins的回调任务,这里假设我的测试分支名是test,以后所有测试环境的功能都需要合并到test分支进行测试,所以我在push event下面配置了test,你也可以配置成其他分支。

Pasted image 20231020163855.png

测试自动编译过程

这样,当我在test分支去进行push操作时,将会触发jenkins 特定项目执行其pipeline,完成编译和发布工作。

在gitlab下方可以点击Test选定特定的事件来测试下整个自动编译过程。

Pasted image 20231020164227.png

关于jenkins的发布和编译脚本由于涉及到公司隐私,我这里就不展开了,最终jenkins的pipeline 也是执行的shell脚本去发布机上去进行编译和发布。关于哪个服务需要发布到哪台机器上,我们是配置到了数据库里,然后脚本会根据要部署的服务从数据库中读取要部署的机器,然后将编译好的可执行程序通过scp发送到对应机器,然后远程执行ssh命令完成服务的启动。

整个项目的发布部署拓扑图如下,其实也完全可以将gitlab和jenkins放到一台机器上。

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM面试知识点整理

文章目录 (一) JVM组成JVM组成部分和运行流程从图中可以看出 JVM 的主要组成部分运行流程:程序计数器Java堆虚拟机栈方法区堆栈的区别是什么? (二) 类加载器双亲委派模型类装载的执行过程 (三) 垃圾回收对象什么时候可以被垃圾回收哪些可以作为根对象 垃…

【QT】Qt控件不显示图标

问题描述 本人在跟着B站视频学习QT时,遇到了一件十分悲惨的事情,一模一样的步骤,我的图标却不能显示。 于是我上网查询一下解决方案,第一种,亲测没用;第二种亲测可以。 解决方法一 1、构建 -> 清理项目…

ArcGIS Maps SDK for JS:隐藏地图边框

文章目录 1 问题描述2 解决方案 1 问题描述 近期,将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27,原本去除地图的css代码失效了。 v4.26及以前版本 ,需要用.esri-view-surface--inset-outline:focus::after 控制边框属性。…

假如我有一台服务器,我会让它提供三种服务

一、提供照片上传、存储和下载服务 随着移动互联网时代的持续快速发展,PC互联网日益势微,各大互联网门户网站的博客、空间也跟着凋零, 作为博客、空间的标配功能的相册也随之被关闭。 2019年3月6日网易相册发布停运公告并于当年5月8日正式停…

基于RK3568高性价比全国产EMS储能解决方案(二)设计方案

目录 版 本 修 订 记 录 1. 产品介绍 1.1. 什么是XM3568-EP 1.2. 产品特点 1.3. 外壳尺寸 1.4. 外壳外观 1.5. 规格参数 2. 设备使用介绍 2.1. 下载需要使用到的驱动和调试工具 2.2. 启动网关 2.3. DEBUG串口的使用方法 2.4. LED指示灯说明 3. Linux系…

0029Java程序设计-家政服务平台管理系统

文章目录 摘要目录系统设计开发环境 摘要 本文首先研究并介绍国内外目前的背景和现状,在此基础上给出论文的主要研究内容,其次,对家政服务平台管理系统的需求进行了分析。再次,对家政服务平台管理系统进行了总体设计,…

【java学习—九】模板方法(TemplateMethod)设计模式(4)

文章目录 1. 在java中什么是模板2. 模板方法设计解决了什么问题?3. 代码化理解 1. 在java中什么是模板 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留…

Jest和Mocha对比:两者之间有哪些区别?

什么是单元测试? 所谓单元测试,是对软件中单个功能组件进行测试的一种软件测试方式,其目的是确保代码中的每一个基本单元都能正常运行。因此,开发人员在应用程序开发的整个过程(即代码编写过程)中都需要进行…

单例模式及其使用场景

单例模式(Singleton):指在一个系统中某个类只存在一个实例,类中自行实例化,实例向该系统提供统一的访问接口。 单例模式有两种表现形式,饿汉式:类加载时,就进行实例化;懒…

【目标检测】Visdrone数据集和CARPK数据集预处理

之前的博文【目标检测】YOLOv5跑通VisDrone数据集对Visdrone数据集简介过,这里不作复述,本文主要对Visdrone数据集和CARPK数据集进行目标提取和过滤。 需求描述 本文需要将Visdrone数据集中有关车和人的数据集进行提取和合并,车标记为类别0&…

在 Windows 用 Chrome System Settings 设置代理

在 Windows 用 Chrome System Settings 设置代理 贴心提示:在设置代理之前,请确保您已经安装了 浏览器。 🔧 设置代理的详细步骤如下: 打开 浏览器,输入 //settings/system 并回车。 在「系统和网络设置」页面中&am…

vue源码分析(四)——vue 挂载($mount)的详细过程

文章目录 前言一、使用RuntimeCompiler解析$mount的原因二、$mount 解析的详细过程1.解析挂载的#app执行了vm.$mount2. 通过$mount方法执行以下文件的mount方法3. 执行util工具文件夹中的query方法4. 执行query方法后返回$mount方法判断el是否是body5. 判断!options.render&…

Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结

uni小程s序SDK 集成到Android原生项目:老项目中用到的库较多,会出现几种冲突问题,总结如下: 报错1: Execution failed for task :app:processDebugManifest. > Manifest merger failed with multiple errors, see logs Andro…

初识HTML超文本标记语言

文章目录 前端简介引入前端三剑客什么是HTML?超文本传输协议前戏HTTP超文本传输协议1.什么是HTTP协议2.四大特性3.数据格式4.响应状态码 基于HTTP协议搭建HTMLHTML简介 前端简介 引入 前端:与用户直接打交道的操作界面都可以称之为前端(那些炫酷的页面)…

计算机视觉注意力机制小盘一波 (学习笔记)

将注意力的阶段大改分成了4个阶段 1.将深度神经网络与注意力机制相结合,代表性方法为RAM ⒉.明确预测判别性输入特征,代表性方法为STN 3.隐性且自适应地预测潜在的关键特征,代表方法为SENet 4.自注意力机制 通道注意力 在深度神经网络中…

Android问题笔记四十一:JNI NewStringUTF错误的几种解决方案

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

合并两个有序链表(C++)

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出&#xff1…

取Dataset子集(pytorch)

取Dataset子集--pytorch 1. why2. how3. example 1. why 我们在调试深度学习代码时,常常会遇到数据集太大,导致调试浪费时间的情况,这种情况下,将数据集中的一个子集拿出来用于调试代码,调试成功在用完整的数据集运行…

从InnoDB索引的数据结构,去理解索引

从InnoDB索引的数据结构,去理解索引 1、InnoDB 中的 BTree1.1、BTree 的组成1.2、BTree中的数据页 2、聚簇索引2.1、聚簇索引的特点2.2、聚簇索引的结构示例2.3、聚簇索引的优缺点 3、非聚簇索引3.1、非聚簇索引结构示例3.2、关于回表3.3、聚簇索引和非聚簇索引的区…