Gitlab实现多项目触发式自动CICD

工作中可能会遇到这种场景,存在上游项目A和下游项目B,项目B的功能依赖项目A(比如B负责日志解析,A是日志描述语言代码),这种相互依赖的项目更新流程一般如下:

  1. A项目更新,通知B项目开发人员进行更新

  2. B项目开发人员收到通知,重新clone A项目代码到本地

  3. 将clone后的代码在本地重新编译打包生成可用的代码包

  4. 将代码包上传到线上服务器(或通过运维平台部署)

  5. 手动重启服务(如需要)

这个流程是这个场景下需要手动操作的必需的5个步骤。第4和第5步的自动化可以依赖运维平台的建设,基于.gitlab-ci.yml的配置实现自动化。本文主要讲述如何通过配置gitlab和.gitlab-ci.yml文件实现1-3步。

第一步:实现A项目更新触发B项目CICD

如果你拿这个问题去咨询chatgpt,那么它会给你类似下面这个答案

那么实现这个功能,又需要分解成两步

1.在B项目中生成触发器令牌

进入Gitlab B项目页面->Settings->CI/CD->Pipeline triggers

gitlab提供了3种使用pipeline triggers的方式,我们这里使用.gitlab-ci.yml,注意示例里提供的项目地址就是需要在配置文件里填写的地址,填写完触发器名称后,点击Add trigger即可获取B项目的触发器token

2.配置A项目的.gitlab-ci.yml文件

在获取了B项目的token后,就可以配置A项目的.gitlab-ci.yml了

这里我需要实现几个功能点

  • 只有A项目指定的某些分支更新才触发B项目pipeline运行
  • 触发B项目pipeline需要传入A项目更新的分支名,用于B项目拉取A项目指定分支
before_script:- echo "The name of the branch is ${CI_COMMIT_BRANCH}"   -- 这一步非必须,只未了在cicd时校验A项目的分支名stages:- trigger trigger_pipeline:stage: triggerscript:- "curl -X POST --fail -F token=ABCXXXXXX_1234_44                                 -- B项目触发器令牌-F ref=master                                              -- 要触发pipeline的B项目分支名-F variables[PROTO_VERSION_DEV]=${CI_COMMIT_BRANCH}        -- 触发pipeline传入A项目分支名参数 https://gitlab.example.com/api/v4/projects/YOUR_TARGET_PROJECT_ID/trigger/pipeline" -- 上一步提供的项目pipeline地址only:- /^.*abc$/             -- 只有A项目abc结尾的分支更新时会触发tags:- java

第二步:B项目CICD中自动clone A项目代码

通常情况下clone代码需要通过个人账密或SSH密钥认证,这两种方式都不适合用于打包机。因此我用到了gitlab中的项目访问令牌(Project access tokens).项目访问令牌允许通过API对一个特定的项目进行认证和授权,不同于个人访问令牌,项目访问令牌与特定项目关联,并用于控制对该项目资源的访问。它通常用于自动化、CI/CD流程、部署以及任何需要在没有人为直接交互的情况下与项目资源交互的场景。

下面时创建一个A项目访问令牌的步骤:进入Gitlab A项目页面->Settings->Access Tokens,设置token名称、过期日期、以及权限范围后即可创建一个可用的访问令牌。注意:在生成token后要记录下token内容,如果忘记录就无法查看到token内容,再生成一个新的即可。

生成A项目访问令牌后,就可以在B项目中添加bash脚本做代码拉取

#!/bin/bashPROJECT_BRANCH_NAME=$xxx   --分支名,由外部传参获取
PROJECT_ACCESS_TOKEN=xxxx
USERNAME=xxx               -- 经过测试用户名可以随意配置,但建议使用有意义的字符
PROJECT_GIT_URI=xxx        -- clone时候使用的路径
TARGET_DIR_NAME=xxx        -- clone的目标文件夹,使用相对路径git clone -b $PROJECT_BRANCH_NAME https://$USERNAME:$PROJECT_ACCESS_TOKEN@$PROJECT_GIT_URI $TARGET_DIR_NAME

第三步:配置B项目的.gitlab-ci.yml文件

由于不同语言编译打包的方式不同,这里不再给出统一的编译打包文件,只需要注意在编译打包前,执行第二步的bash脚本

script:- bash ./bash脚本所在路径/xx.sh $PROJECT_BRANCH_NAME
测试效果

正确完成上面三个配置步骤后,即可向A项目推送代码测试效果。预期达到的效果为:

1.A项目代码推送完成后,开始执行CICD

2.B项目的CICD被触发,完成代码编译打包和部署

3.建议在B项目中的.gitlab-ci.yml中配置altert stage,增加通知模块。这样每次CICD完成都会发送通知

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

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

相关文章

Nature: 一种基于宏基因组序列空间生成无参考的蛋白质家族的计算方法

通过全局宏基因组学揭示功能性暗物质 Unraveling the functional dark matter through global metagenomics Article, 2023-10-11 Nature [IF: 64.8] DOI: https://doi.org/10.1038/s41586-023-06583-7 原文链接:https://www.nature.com/articles/s41586-023-06…

【C+继承】

继承 1.继承的概念及定义2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继承的总结和反思 1.继承的概念及定义 ->继承的概念 继承的本质:就是继承的父类的成员 ->继承的…

基于AutoDL部署langchain-chatchat-0.3.1实战

一、租用AutoDL云服务器,配置环境 1.1 配置AutoDL环境 注册好autodl账户之后,开始在上面租服务器,GPU我选择的是RTX4090*2,西北B区,基础镜像选择的是Pytorch-2.3.0-python-3.12(ubuntu22.04)-…

垃圾回收相关概念

12.1. System.gc()的理解 在默认情况下,通过system.gc()或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc() 调用附带一个免责声明&#x…

网络原理2-网络层与数据链路层

目录 网络层数据链路层 网络层 网络层做的工作: 1、地址管理–>IP地址 2、路由选择–>数据包传输的路径规划 网络层主要的协议就是IP协议 IP协议的报头结构: 4位版本: 有两个取值,4表示IPv4,6表示IPv6&am…

C++ IO流

文章目录 C语言中的流式输入输出c中的输入输出继承关系c中的循环输入再次回顾类型转换 C语言中的流式输入输出 C语言的输入输出: scanf printf 输入输出是针对设备—内存之间的关系 比如:网卡,里面有一套类似文件系统的东西来记录, 这时就需要进行写入读取操作 在Linux中, 一…

Blender/3ds Max/C4D哪个软件好?

在3D建模和动画制作领域,Blender、3ds Max和Cinema 4D(C4D)都是备受赞誉的软件。每个软件都有其独特的优势和特点,选择哪个软件取决于用户的具体需求和个人偏好。今天,成都渲染101云渲染就来分析一些这三款软件的情况&…

C++前后缀分解

相关知识点 C算法与数据结构 打开打包代码的方法兼述单元测试 这个算法很容易想到,学习了本文后,可以更快得想到。 前后缀分解 分治法的一种,将数组和字符串,拆分成前缀和后缀。字符串(数组)的前缀是字符串的前i个元…

linux---压缩打包

linux打包和压缩文件和目录: 归档(打包)命令:tar 归档就是将多个文件或者目录打包成为一个文件,存放再磁盘中,方便文件或者目录丢失时,可以恢复。 归档文件名使用相对路径 (注意区分归档文件和被归档文…

Acrobat 9 安装教程

软件介绍 Adobe Acrobat 是由Adobe公司开发的一款PDF(Portable Document Format,便携式文档格式)编辑软件。借助它,可以以PDF格式制作和保存文档,以便于浏览和打印,同时还可以使用一些高级工具来创建、编辑…

[SWPU2019]Web11

考点: sql注入 buuctf上开启容器可以看到是个登录页面,注入的地方不在这里,我们首先需要进行注册一个账号,然后登录上去,可以看到有个申请发布广告。 既然登录页面没有东西,那么申请发布广告肯定会有东西…

Docker上安装mysql

获取 MySQL 镜像 获取镜像。使用以下命令来拉取镜像: 1docker pull mysql:latest 这里拉取的是最新版本的 MySQL 镜像。你也可以指定特定版本,例如: 1docker pull mysql:8.0 运行 MySQL 容器 运行 MySQL 容器时,你需要指定一些…

基于协同过滤+python+django+vue+的音乐推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

计算机网络(一) —— 网络基础入门

目录 一,关于网络 二,协议 2.1 协议是什么,有什么用? 2.2 协议标准谁定的? 2.3 协议分层 2.4 OSI 七层模型 2.5 TCP/IP 四层模型 三,网络传输基本流程 3.1 局域网中两台主机通信* 3.2 报文的封装与…

【VSCode】VSCode Background 背景插件辅助窗口程序

前排贴上Github项目链接 GitHub窗口项目链接 这是一个基于VSCode上由shalldie上传的background扩展制作的windows窗口程序。 该程序旨在通过窗口程序尽可能的完善该扩展原有的功能。 background - shalldie 的最大优势是我目前仅在其扩展上发现了UseFront的选项,这…

共享单车轨迹数据分析:以厦门市共享单车数据为例(四)

副标题:共享单车与地铁接驳距离探究——以厦门市为例 关于轨道交通站点接驳范围的研究早已屡见不鲜,通常认为以站点为圆心、800米作为地铁站直接的服务范围是合理的。近年来,随着轨道、公交和慢行交通三网融合概念的提出,慢行交通…

docker--刚开始学不知道如何操作拉取,或拉取失败(cmd)

报 unauthorized: incorrect username or password.(未授权) 进行授权 在docker desktop注册账号登录好docker desktop 在cmd中进行docker登录,输入账号密码,提示Login Succeeded,即登录成功 docker login -u xxx(x…

【Elasticsearch系列五】Java API

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

opencv之图像梯度

图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计…

C++11的部分新特性

目录 1.列表初始化 1.1 { } 初始化 1.2 std::initializer_list 2.声明 2.1 auto 2.2 decltype 2.3 nullptr 3. 范围for 4.STL中的一些变化 5.右值引用与移动语义 5.1 左值引用与右值引用 5.2 左值引用与右值引用的比较 5.3 右值引用使用场景 5.4 完美转发 6.新的…