gitlab动态流水线

文章目录

    • 1. 说明
    • 2. 官方样例
      • 2.1 在作业中生成配置文件,保存为产物
      • 2.2 将触发器作业配置为在生成配置文件的作业之后运行。
    • 3. 实战应用
      • 3.1 背景介绍
      • 3.2 项目介绍
      • 3.3 公共项目配置
      • 3.4 测试项目配置
      • 3.5 测试
    • 4. 总结

1. 说明

顾名思义,动态流水线就是一种动态生成的流水线,主要在于其具有强大的灵活性,可以在特殊的场景下基于我们的一个预期生成我们想要的流水线,从而来执行某个作业任务。

既然是动态生成的流水线,那肯定就需要额外的触发操作来运行流水线,这里我们可以通过trigger:include: artifact的方式,具体就是使用trigger关键字将 include: artifact 设置为生成的产物并通过 include: job 设置为创建产物的作业。

2. 官方样例

2.1 在作业中生成配置文件,保存为产物

generate-config:stage: buildscript: generate-ci-config > generated-config.ymlartifacts:paths:- generated-config.yml

2.2 将触发器作业配置为在生成配置文件的作业之后运行。

child-pipeline:stage: testtrigger:include:- artifact: generated-config.ymljob: generate-config

在此示例中,GitLab 检索 generated-config.yml 并使用该文件中的 CI/CD 配置触发子流水线。

产物路径由GitLab 而非 runner 解析,因此该路径必须与运行GitLab 的操作系统的语法相匹配。如果GitLab 在 Linux 上运行但使用 Windows runner 进行测试,则触发作业的路径分隔符为 /。使用 Windows runner 的作业的其他 CI/CD 配置,如脚本,使用 \

3. 实战应用

3.1 背景介绍

  • 我们希望如果研发在提交代码的时候,如果commit message中有x86_64关键字,则创建一个Release_x86_64的job,如果commit message中有aarch64关键字,则创建一个Release_aarch64的job。
  • 该案例使用了include的嵌套方式,也是另类的一种高级用法。

3.2 项目介绍

  • ci-test 是公共项目
    • variables.yml 里面存放了群组级下的所有的常用的变量
    • template.yml 里面是公共的job,里面也通过include 嵌套了variables.yml
  • ci-test-1 是测试项目

3.3 公共项目配置

在这里插入图片描述
gitlab-ci/vars/variables.yml

variables:DOCKER_VERSION: "Docker version 20.10.17, build 100c701"BUILD_TYPE: ReleaseREGION: BJTAG: dc

gitlab-ci/common_job/template.yml

##set default retry
default:retry: max: 1when: runner_system_failure##set image & gitlab-runner
.image@image:image:name: alpine:latest.tags@tag:tags:- $TAG##include variables
include:- project: "ops/ci-test"ref: devfile: "gitlab-ci/vars/variables.yml"###set job
.build@build:script:- envextends: - .image@image- .tags@tagrules:- when: always

3.4 测试项目配置

ci文件

stages:- test- buildinclude:- project: "ops/ci-test"ref: "dev"file:- "gitlab-ci/vars/variables.yml"generate-config:stage: testimage: alpine:latestscript: - env- chmod +x generate.sh- bash -x generate.sh- cat generated-config.ymlartifacts:paths:- generated-config.ymlbefore_script:- apk update- apk add bashchild-pipeline:stage: buildtrigger:include:- artifact: generated-config.ymljob: generate-config

generate.sh

#!/bin/bash
echo $CI_COMMIT_MESSAGEif [[ $CI_COMMIT_MESSAGE == *x86_64* ]];then
cat <<EOF > generated-config.yml
include:- project: "ops/ci-test"ref: "dev"file:- "gitlab-ci/common_job/template.yml"
stages:- generate_jobs
Release_x86_64:stage: generate_jobsimage: alpine:latestextends:- .build@build
variables:DOCKER_VERSION: $DOCKER_VERSIONBUILD_TYPE: $BUILD_TYPEPLATFORM: x86_64REGION: $REGION
EOF
elif [[ $CI_COMMIT_MESSAGE == *aarch64* ]]; then
cat <<EOF > generated-config.yml
include:- project: "ops/ci-test"ref: "dev"file:- "gitlab-ci/common_job/template.yml"
stages:- generate_jobs
Release_aarch64:stage: generate_jobsimage: alpine:latestextends:- .build@build
variables:DOCKER_VERSION: $DOCKER_VERSIONBUILD_TYPE: $BUILD_TYPEPLATFORM: aarch64REGION: $REGION
EOF
fi

3.5 测试

本地项目提交 - 提交commit包含x86_64
在这里插入图片描述
在这里插入图片描述
本地项目提交 - 提交commit包含aarch64
在这里插入图片描述
在这里插入图片描述

4. 总结

其实这个案例相对比较简单,主要想表达的一个思想是,在某个业务场景下,我们可以通过通过脚本动态的生成gitlab的流水线,从而达到我们想要的效果。
此外,这里也给大家推荐下gitlab官方项目的测试用例。

  • 使用 Jsonnet 的动态子流水线
  • Dynamic child pipeline creation via artifact includes

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

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

相关文章

Shell函数数组练习

1、编写函数&#xff0c;实现打印绿色OK和红色FAILED&#xff0c;判断是否有参数&#xff0c;存在为Ok&#xff0c;不存在为FAILED [rootshell ~]# vim ok.sh #!/bin/bash read -p "请输入一个参数:" i function ok…

mac 安装nvm以及切换node版本详细步骤

1、nvm介绍&#xff08;node版本管理工具&#xff09; nvm 可以让你通过命令行快速安装和使用不同版本的node 有时候项目太老&#xff0c;node版本太高,执行npm install命令会报错,可以借助nvm切换低版本的node。 2、安装nvm 在终端执行安装命令 curl -o- https://raw.gith…

后端只打印了info等级的日志?-SpringBoot日志打印-Slf4j

在调用log变量的方法来输出日志时&#xff0c;有以上5个级别对应的方法&#xff0c;从不太重要&#xff0c;到非常重要 调用不同的方法&#xff0c;就会输出不同级别的日志。 trace&#xff1a;跟踪信息debug&#xff1a;调试信息info&#xff1a;一般信息warn&#xff1a;警告…

1、混合方式UI设计

1、混合方式UI设计 新建项目添加静态资源添加资源添加action添加菜单菜单栏工具栏中间编辑区域 代码添加其他组件字体和大小状态栏 添加槽函数UI设置的转到槽的手写的设置应用程序图标 代码 新建项目 MainWindow代码文件夹主窗口为 (QMainWindow) 添加静态资源 AppIcon.icoi…

scikit-learn-feature_selection

参考&#xff1a; Feature selection 1. 移除低方差的特征 方差低&#xff0c;说明变化不大。 将特征方差值小于一定值的特征移除 单变量特征分析 通过单特征分析&#xff0c;选择最好的&#xff08;前k个&#xff09;的特征&#xff0c;scikit-learn 提供的方法有&#x…

基于JAVA+SpringBoot+Vue的前后端分离的旅游网站

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 近年来&#xff0c;随…

IntelliJ IDEA 自带的 HTTP Client接口调用插件,替代 Postman

文章目录 引言建议目录结构新建请求不同环境的变量配置添加环境http-client.env.jsonhttp-client.private.env.json引用变量 请求示例Get请求示例Post请求示例鉴权示例断言示例Websocket请求示例 内置对象和动态变量内置对象&#xff1a;内置变量&#xff1a; 引言 在日常的 W…

关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明

问题来源&#xff1a; 1.关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明 说明&#xff1a; 1.最近npm、unpkeg都访问异常&#xff0c;可能是unpkg.com等国外的服务器不稳定导致的请求未响应。 解决方案&#xff1a; 1.请切换静态文件引入的方式请求相关资源。参…

LaTex:如何在数学环境下打出大的右括号“}“

一般来说多行公式打左大括号都知道使用语法"cases" \begin{cases} foo\\ foo\\ \end{cases}最近需要键入右边大花括号括起来公式的时候犯难了&#xff0c;搜了很多用的都是"\left.array\right}"&#xff0c;看得我昏迷&#xff0c;屡屡报错。 突然想起很久…

selenium自动化(中)

显式等待与隐式等待 简介 在实际工作中等待机制可以保证代码的稳定性&#xff0c;保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时&#xff0c;如果页面的渲染速度跟不上代码的运行速度&#xff0c;就需要人为的去限制代码执行的速度。 在做 Web 自动化时…

PS背景色替换

1.打开ps后右键图层复制 2.隐藏复制的图层&#xff0c;选择魔术橡皮擦擦掉不用替换的颜色 3.选中图层后选择颜色叠加修改图层颜色

机器学习-SVM(支持向量机)

推荐课程&#xff1a;【机器学习实战】第5期 支持向量机 |数据分析|机器学习|算法|菊安酱_哔哩哔哩_bilibili 赞美菊神ヾ ( ゜ⅴ゜)&#xff89; 一、什么是支持向量机&#xff1f; 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一类按监督学习&#xff0…

【神行百里】pandas查询加速之行索引篇

最近进行大数据处理的时候&#xff0c;发现我以前常用的pandas查询方法太慢了&#xff0c;太慢了&#xff0c;真是太慢了&#xff0c;查阅资料&#xff0c;遂发现了一种新的加速方法&#xff0c;能助力我飞上天&#xff0c;和太阳肩并肩&#xff0c;所以记录下来。 1. 场景说明…

跨境独立站优势包括哪些?是否值得做呢?

跨境独立站的优势主要包括&#xff1a; 自主品牌建设&#xff1a;独立站可以更好地展示自主品牌形象&#xff0c;提高品牌知名度和美誉度。 独立域名&#xff1a;独立站可以拥有自己的域名&#xff0c;更加稳定和可信。 自主运营&#xff1a;独立站可以自主运营&#xff0c;包…

低版本echarts的升级到新版5.4.0的echarts浏览器预警和报错信息

新版5.4.0的echarts浏览器预警和报错信息 [ECharts] DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. All style properties are configured in itemStyle directly now. 因为normal层被移除&#xff0c;问题代码如下图所示 itemStyle: {normal:…

MBR30200FCT-ASEMI大电流肖特基MBR30200FCT

编辑&#xff1a;ll MBR30200FCT-ASEMI大电流肖特基MBR30200FCT 型号&#xff1a;MBR30200FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff1a;30A 最大重复峰值反向电压&#xff1a;200V 产品引线数量&#xff1a;3 产品内部芯片个数&am…

系统韧性研究(7)| 韧性系统的16大指导原则

不良事件和条件可能会中断系统&#xff0c;导致系统无法提供必要的功能和服务。正如我在本系列的前几篇文章中所概述的那样&#xff0c;韧性是大多数系统的一个基本质量属性&#xff0c;因为它们提供了关键的能力和服务&#xff0c;尽管存在着不可避免的困难&#xff0c;但这些…

文件搜索项目知识介绍

项目背景SQLite介绍SQLite、驱动包下载SQLite使用SQLite和MySQL区别 JDBC搭配SQLiteJDBC原理-创建连接JDBC原理-关闭连接添加和发送SQLJDBC-事务开启和提交 打包.exe文件线程池线程数量问题 项目背景 需求上&#xff1a;因为Windows的文件搜索工具搜索速度十分的慢&#xff1b…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似&#xff0c;枚举的定义有两种方式。区别是结构体必须以“F”开头命名&#xff0c;而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下&#xff0c;注意这个定义的代码一定要在“UCLASS()”…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…