GitLab CI 实现项目A更新代码自动触发项目B更新错误码文档

2024-01-21

一、CI/CD简介

CI/CD 是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写,是一种软件开发和交付的最佳实践。这两个概念通常一起使用,但有些时候它们也会被区分开来:

  1. 持续集成 (CI - Continuous Integration): 持续集成是一种开发实践,旨在通过频繁地集成和验证代码,确保团队成员的工作不会破坏整体代码库的稳定性。在 CI 中,开发者将代码频繁地合并到共享的主干(主要分支),每次合并都会触发自动构建、测试和代码静态分析等过程。如果有问题,团队可以尽早发现并纠正。

  2. 持续交付 (CD - Continuous Delivery): 持续交付是一种软件开发流程,旨在通过自动化构建、测试和部署的过程,使软件随时都能够交付到生产环境。持续交付的目标是确保代码在通过 CI 流程后可以随时投入生产环境,但在投入生产之前可能需要手动的最终审查和决策。

  3. 持续部署 (CD - Continuous Deployment): 持续部署是持续交付的进一步延伸,它的目标是通过自动化流程,将通过 CI 流程的代码自动部署到生产环境,无需人工干预。在持续部署中,合格的代码经过自动测试后,将直接部署到生产环境。

CI/CD 工作流程通常包括自动化测试、构建、部署和监控等环节,以确保软件可以快速、高效地交付到最终用户手中。这对于敏捷开发、DevOps 实践以及快速响应市场需求都是非常关键的。

二、实现步骤

项目A更新代码之后通过webhook触发项目B的pipeline

1. 创建 pipeline trigger token

在需要被触发的项目的setting里面找到 Pipeline triggers,点击Add trigger 生成 token

2. 触发

当创建了token之后,可以通过API或者是webhook用 token 来触发 pipeline 事件

例如cURL:

curl --request POST \
     --form token=<token> \
     --form ref=<ref_name> \
     "https://gitlab.example.com/api/v4/projects/<project_id>/trigger/pipeline"

CI/CD Job:

trigger_pipeline:
  stage: deploy
  script:
    - 'curl --fail --request POST --form token=$MY_TRIGGER_TOKEN --form ref=main "https://gitlab.example.com/api/v4/projects/123456/trigger/pipeline"'
  rules:
    - if: $CI_COMMIT_TAG
  environment: production

WebHook:Webhook(网络挂钩)是一种用于实时事件通知的机制,它允许一个系统将事件信息发送到另一个系统。Webhook 是在特定事件发生时自动触发的 HTTP POST 请求。通常,Webhook 被用于将实时事件从一个系统推送到另一个系统,从而触发自动化的操作。

https://gitlab.example.com/api/v4/projects/<project_id>/ref/<ref_name>/trigger/pipeline?token=<token>

我们这里使用 WebHook来触发项目B的自动更新事件:在项目A的设置里找到 Webhooks 填入 pipeline trigger 中获得的 url,选择相应的触发事件,下图选择了 Push 操作来触发自动更新错误码文档。

3.  创建和运行 pipeline

官方文档地址:GitLab官方文档

自动更新文档需要运行代码,这里需要我们首先有一个 runner

GitLab Runner 是 GitLab CI/CD(持续集成/持续交付)系统的一个组件,用于执行构建、测试和部署作业。Runner 负责接收来自 GitLab CI 的作业请求,并在指定的环境中执行这些作业。每个 Runner 都与一个特定项目相关联,并负责处理该项目的 CI/CD 工作。

mac下载 GitLab Runner:

brew install gitlab-runner

注册:这一步需要注意设置了tag后续ci文件里要指定tag

gitlab-runner register

启动:

gitlab-runner install

gitlab-runner start

4. 编写.gitlab-ci.yml 文件

.gitlab-ci.yml 是 GitLab CI/CD 配置文件,用于定义项目的 CI/CD 流程。这个文件应该位于项目的根目录,并包含了构建、测试、部署等阶段的定义。

以下是一个简单示例:

stages:
  - build
  - test
  - deploy

variables:
  # 定义全局变量,可以在整个文件中使用
  GIT_STRATEGY: clone
  TEST_IMAGE: "alpine:latest"

before_script:
  # 所有阶段执行前都会执行的脚本
  - echo "Before script: Initialize environment"

build_job:
  stage: build
  script:
    - echo "Building the project..."

test_job:
  stage: test
  script:
    - echo "Running tests..."
  only:
    - master # 只有在 master 分支上触发

deploy_job:
  stage: deploy
  script:
    - echo "Deploying to production..."
  only:
    - master

上述示例文件定义了三个阶段( build test deploy ),并定义了一些全局变量。每个阶段下都有一个或多个作业( job )的定义,包括作业的名称、阶段、脚本等信息。

  • before_script : 定义了在所有阶段执行前都会运行的脚本。
  • build_job : 定义了一个构建作业,用于构建项目。
  • test_job : 定义了一个测试作业,用于运行测试。通过 only 关键字,指定只有在 master 分支上触发时才执行。
  • deploy_job : 定义了一个部署作业,用于将项目部署到生产环境。同样,通过 only 关键字,指定只有在 master 分支上触发时才执行。

自动更新操作:

stages:
  - run_main_go

run_main_go:
  stage: run_main_go
  image: reg.smvm.cn/appbase/golang-build:1.21-alpine3.17
  script:
    - go mod download -x
    - go run main.go
  artifacts:
    paths:
      - "*.md"
  tags:
    - k8runner

项目A的Push事件都会触发项目B的自动更新文档操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitLab CI 实现项目A更新代码自动触发项目B更新错误码文档 的相关文章

  • Gitlab 页面自定义域 SSL

    我正在尝试将 TLS SSL 添加到 Gitlab 上的自定义域 目前它说我的网站可以在https yodel co https yodel co 但是当我去那里时它说证书无效 我该如何验证证书 In the docs http docs
  • 如何在Eclipse中添加GitLab存储库?

    如何在Eclipse中添加Gitlab 这样我就可以从 GitLab 推送或获取 我是这方面的新手 请给予更多解释 一 准备工作 确保 Eclipse 中有 eGit 帮助 gt 安装详细信息 看到 Eclipse Git Team 提供者
  • 如何强制 GitLab 在启动新管道之前运行完整的管道?

    我有一个与我的项目关联的运行程序以避免并发构建 GitLab 在开始新管道之前处理完整的管道 并发设置为 1 运行器的配置文件 before script echo CI COMMIT SHA echo CI PROJECT DIR sta
  • 无法推送到 Gitlab 注册表 | Quarkus - 臂架构建

    我目前正在开发 Quarkus 应用程序 因此需要 CI 管道 容器注册表 由于通过 docker 的容器化不起作用 docker 守护进程 特权模式 我想使用 Jib Quarkus 已经支持它 管道中的命令 mvn clean pack
  • 无法将文件推送到 git,因为:无法推送一些引用

    我有一个目录 我想将其转换为 git 项目 我在 gitlab 中创建了一个新项目 然后执行了以下操作 git init git remote add origin email protected cdn cgi l email prote
  • 在服务器上找不到 Git LFS 文件

    我们一直在使用 Git 和由我们自己的 Gitlab 实例托管的 git lfs 有时 当某个特定用户推送文件时 其中一些文件 似乎是 png 文件 不会进入 LFS 存储 而是添加到 git 中 当这种情况发生在他们的机器上时 我还无法看
  • gitlab错误:没有这样的文件或目录,什么问题

    bash home git gitlab apps gitlab gitlab shell bin gitlab shell No such file or directory what is the problem 当我克隆 gitlab
  • Gitlab-CI,按计划运行,但仅在有更改时运行

    我想每天部署一次我的项目 但前提是发生了更改 我可以在每个特定的时间进行部署 并且我很乐意使用预定的管道来触发和部署 但是 并不总是存在需要部署的更改 理想情况下 如果自上次部署以来代码库没有发生任何更改 则管道当天不会运行 有什么办法可以
  • 最大限度地减少 Docker-in-Docker 容器内“docker build”的执行时间

    使用案例 我们在 Jenkins 中有几个 发布工作 build and push将应用程序的 Docker 镜像复制到 docker 注册表 更新各个文件中的项目版本 最后将发布标签推送到相应的 Git 存储库 整个过程在一个隔离的内部运
  • 如何在 gitlab-ci docker 执行器中使用 cuda

    我们正在使用 gitlab 持续集成来构建和测试我们的项目 最近 其中一个项目添加了 CUDA 的要求以启用 GPU 加速 我不想改变我们的管道 docker 和 gitlab ci 对我们来说运行良好 所以我想以某种方式让 docker
  • 如何修复 Android studio 中调用失败来自服务器的意外响应:未经授权

    我有一个项目Gitlab https gitlab com我最近几天一直在用它 现在我想要pull在我的家用电脑上进行项目 但显示以下错误 Invocation failed Unexpected Response from Server
  • 当提交推送到另一个项目时触发项目的构建

    我在 gitlab 上使用 gitlab runner 机器有三个项目 A B C 项目 A 包含 gitlab ci yml 文件 当 A 上有提交时 该文件调用脚本来构建程序 build stage build script build
  • 从 JIRA 创建 Gitlab 分支

    我最近开始使用 Gitlab 并与 Jira 集成 Gitlab 和 Jira 服务器都是在我的公司环境内部自行托管的 我遇到了一个要求 我想直接从 JIRA 问题在 Gitlab 中为项目 问题创建一个分支 有可能做到吗 如果是的话怎么办
  • GitLab 在 Debian 上安装失败

    我正在尝试在 Debian 8 5 0 上安装 GitLab 我遵循安装指南 https about gitlab com downloads debian8但最后一步失败了 我在文档中找不到任何信息 gitlab ctl 重新配置完成 R
  • 用于指示存储库已弃用的 Git 挂钩

    我们有一个存储库 托管在 GitLab 实例上 少数项目仍在引用该存储库 但已被弃用 取而代之的是另一个解决方案 有什么方法可以将存储库标记为 已弃用 吗 理想情况下 每个fetch来自此存储库 作为git submodule update
  • Gitlab:无法识别对等方的证书颁发者

    我在全新安装 gitlab 时遇到此错误 该消息如下所示 fatal unable to access https gitlab ci token email protected cdn cgi l email protection som
  • 如何在 gitlab-ci 作业之间传递变量?

    我有一个像这样的 gitlab ci stages calculation execution calculation job stage calculation script calculate something and output
  • 为不同分支部署GitLab页面

    我正在使用 GitLab Pages 部署我的 React 应用程序 并且运行良好 这是我的gitlab ci yml Using the node alpine image to build the React app image nod
  • Mac上使用docker安装gitlab的权限问题

    我正在尝试让 Gitlab 在本地运行 但遇到了权限问题 cp cannot create regular file etc gitlab gitlab rb Permission denied 我正在运行的命令是 sudo docker
  • 如何在不重建镜像的情况下更新源代码

    我在 GitLab 上创建了一个新的存储库 在其中为我的 Angular 项目构建了一个 docker 镜像 现在我在本地对源代码做了一些修改 有没有办法可以更新 docker 映像而不重建它 None

随机推荐

  • 基于卡尔曼的混合预编码技术用于多用户毫米波大规模MIMO系统研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • Redis基础系列-哨兵模式

    Redis基础系列 哨兵模式 文章目录 Redis基础系列 哨兵模式 1 引言 2 什么是哨兵模式 3 哨兵模式的配置 4 哨兵模式的启动和验证 4 1 主master宕机 看会出现什么问题
  • 获取员工其当前的薪水比其manager当前薪水还高的相关信息

    后悔早签三方了 双非渣渣不该信金九银十 凯子今年确实也卷起来了 想进华为 就别去华为实习 鼠鼠拿了几个offer 请大家帮忙看下 有点困惑百度 base北京 n 4 16 薪资可 华为开奖 一个月过去了 25终于找到JAVA实习 算法方向推
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 【go语言】读取toml文件

    一 简介 TOML 全称为Tom s Obvious Minimal Language 是一种易读的配置文件格式 旨在成为一个极简的数据序列化语言 TOML的设计原则之一是保持简洁性 易读性 同时提供足够的灵活性以满足各种应用场景 TOML
  • 都在做端到端了,传统规控/轨迹预测还能坚持几年?

    最近有些做传统规控和轨迹预测的小伙伴问我 现在LLM做端到端自动驾驶这么火 自己要不要考虑转行 坚持传统规控 轨迹预测还能做几年 会不会三五年后失业了 而且最近小米汽车发布会 也说已经搭载了端到端感知决策大模型 全球首次用于量产车 这个问题
  • 深圳三维扫描分析/偏差检测模具型腔三维尺寸及形位偏差测量公司

    CASAIM中科广电三维扫描模具型腔深圳案例 模具型腔的三维扫描分析 偏差检测是一项重要的质量控制过程 旨在确保模具制造过程中的精确度和一致性 CASAIM中科广电通过使用高精度的三维扫描设备 可以获取模具型腔的实际形状和尺寸数据 并将其与
  • ICLR2024 | ReSimAD:如何在没有真实数据的情况下,提升感知模型的泛化性能

    点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 今天自动驾驶之心为大家分享 ICLR 2024刚刚中稿的ReSimAD ReSimAD可以极大地提升感知模型对于目标域场景的泛化能力 甚至比一些无监督领域适配的方法还要
  • 回望计算机视觉会议ICCV的31年

    作者 原野寻踪 编辑 汽车人 原文链接 https zhuanlan zhihu com p 670393313 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 全栈算法 技术交流群 本文只做
  • pip问题们

    pip问题们 下载指定版本 已经安装的库列表保存到文本文件中 根据依赖文件批量安装库 离线安装库 whl 文件 pip install git https xxxx安装失败解决方法 下载指定版本 安装特定版本的package 通过使用 gt
  • 上汽飞凡,突然换帅了。。。

    作者 有据无车 编辑 智能车参考 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心技术交流群 本文只做学术分享 如有侵权 联系删文 飞凡汽车 突然换帅了 最近 上汽集团官方宣布 乘用车总经理 飞
  • FL Studio2024国内中文版多少钱?有哪些新功能呢

    购买您想要的最新的水果软件FL2024版本 然后所有未来所有该版本更新都是免费的 再也不用付钱了 在音乐软件行业 更新费用通常在 960 1600 元之间 而 FL Studio 将始终免费为您提供最新版本 因为我们相信 只要我们开发 FL
  • 视频剪辑软件Camtasia2024最新版本快捷键大全

    Camtasia Studio是一款专门录制屏幕动作的工具 它能在任何颜色模式下轻松地记录 屏幕动作 包括影像 音效 鼠标移动轨迹 解说声音等等 今天来给大家介绍一下Camtasia快捷键的相关内容 Camtasia也是一个十分好用的电脑屏
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 有 无策略奖励 2 2 训练结果1
  • 题解 | #连续两次作答试卷的最大时间窗#

    程序员到大神成长书单 最无语的公司 写代码让领导不开心了咋办 快手秋招急招 暑期实习也可以投 找实习需要实习经历 操作系统岗 简历能走吗 面了南网数字集团 面试官问的问题有两个挺尖锐的 这种是不是说明不太想要我 俗话说打蛇打七寸 我感觉面试
  • 查找薪水记录超15条的员工号emp_no以及其对应的记录次数

    理想 大模型面经 23届试用期没通过 还能找到工作吗 有没有啥厂招往届生啊 腾讯音乐前端暑期实习一面 已oc 华为od 机试 面试面经 华为OD技术岗面经汇总 软开 算法 测试岗 想看一下大家看法 一个月过去了 25终于找到JAVA实习 华
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 2024最新MathType7.4.10中文版下载安装激活教程

    MathType 是一款专业的数学公式编辑工具 提供交互式编辑器 让你在编辑数学试卷 书籍 报刊 论文 幻灯演示等文档轻松输入各种复杂的数学公式和符号 1 本次讲解mathtype 7版本的安装步骤 MathType2024 Win 安装包
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • GitLab CI 实现项目A更新代码自动触发项目B更新错误码文档

    一 CI CD简介 CI CD 是持续集成 Continuous Integration 和持续交付 持续部署 Continuous Delivery Continuous Deployment 的缩写 是一种软件开发和交付的最佳实践 这两