使用trigger-forward跨流水线传递参数

参考文档:https://docs.gitlab.com/ee/ci/yaml/#triggerforward

今天给大家介绍一个gitlab CI/CD的关键字 - forward,该关键字是一个比较偏的功能,但同时也是一个很实用的功能,我们通过在gitlab的ci文件中使用forward关键字,可以将变量传递到下游的流水线。

文章目录

    • 1. 介绍
      • 1.1 forward关键字
      • 1.2 yaml_variables和pipeline_variables的区别
    • 2. 项目配置
      • 2.1 项目信息
      • 2.2 pipeline ci文件
      • 2.3 project-b和project-c ci文件
      • 2.4 project-a ci文件(开启pipeline trigger)
    • 3. 场景使用
      • 3.1 场景1: 任何参数都不传递
      • 3.2 场景2: 传参数,并覆盖当前流水线的变量
      • 3.3 场景3:触发项目b和c,不传入trigger参数
      • 3.4 场景4:触发项目b和c,传入trigger参数
      • 3.5 场景5: 触发项目b和c,传入trigger参数(验证)

1. 介绍

1.1 forward关键字

默认情况下,只有yaml定义的变量被传递给下游管道,使用forward关键字,现在可以传递它手动管道变量下游管道。

  • forward:yaml_variables是一个已经存在的行为,默认为true。当为true时,将传递给yaml定义的变量

到下游管道。

  • forward:pipeline_variables是一个新特性,默认为false。当为true时,手动管道变量被传递给下游管道。

1.2 yaml_variables和pipeline_variables的区别

  • pipeline_variables可以将参数传递到下级pipeline,即便是在当前的pipeline中定义好参数,也会随着传入的参数来覆盖,见场景4和5。

  • yaml_variables也可以将参数传递到下级pipeline,但是需要在当前的pipeline中定义好参数,不会随着传入的参数来覆盖,见场景4和5。

2. 项目配置

2.1 项目信息

在pipeline-trigger组(定义全局变量:GLOBAL_VAR=master,release)下有四个项目:

  • project-a: 父pipeline;
  • project-b(项目级变量:PROJECT_VAR=project): 子pipeline;
  • project-c(无项目级变量): 子pipeline;
  • centralized-ci : 存放pipeline ci的文件。

2.2 pipeline ci文件

存放在centralized-ci项目中,打印全局变量GLOBAL_VAR,项目变量PROJECT_VAR,trigger传入的变量TRIGGER_VAR):

template/common-temp.yml

image: busybox:latestbuild1:stage: buildscript:- echo "Do your build here"test1:stage: testscript:- echo "Do a test here"- echo "For example run a test suite"- echo "$GLOBAL_VAR $PROJECT_VAR $TRIGGER_VAR"deploy1:stage: deployscript:- echo "Do your deploy here"

2.3 project-b和project-c ci文件

include:- project: "cs-test-group1/kxwang/pipeline-trigger/centralized-ci"ref: mainfile: '/template/common-temp.yml'

2.4 project-a ci文件(开启pipeline trigger)

stages:- build- trigger
variables:GLOBAL_VAR: hahaPROJECT_VAR: xixiTRIGGER_VAR: hehebuild_job:stage: buildscript:- echo "$GLOBAL_VAR $PROJECT_VAR $TRIGGER_VAR"trigger_project-b:stage: triggervariables: # default variables for each jobGLOBAL_VAR: haha123PROJECT_VAR: xixi456TRIGGER_VAR: hehe789trigger:project: cs-test-group1/kxwang/pipeline-trigger/project-bbranch: master#include:#  #- cs-test-group1/kxwang/pipeline-trigger/centralized-ci/template/common-temp.yml#  #- cs-test-group1/kxwang/pipeline-trigger/project-b/.gitlab-ci.yml'#  - project: cs-test-group1/kxwang/pipeline-trigger/project-b#    ref: master#    file: '.gitlab-ci.yml'strategy: dependforward:pipeline_variables: truerules:- if: '$PROJECT_LIST =~ /.*project-b.*/'trigger_project-c:stage: triggertrigger:project: cs-test-group1/kxwang/pipeline-trigger/project-cbranch: master#include:#  #- cs-test-group1/kxwang/pipeline-trigger/centralized-ci/template/common-temp.yml#  - project: cs-test-group1/kxwang/pipeline-trigger/project-c#    ref: master#    file: '.gitlab-ci.yml'strategy: dependforward:yaml_variables: true#  GLOBAL_VAR: haha#  PROJECT_VAR: xixi#  TRIGGER_VAR: heherules:- if: '$PROJECT_LIST =~ /.*project-c.*/'

3. 场景使用

3.1 场景1: 任何参数都不传递

curl -X POST \--fail \-F token=glptt-30f3a36ac8f789cff5404f92d1d0a0be61d48491 \-F ref=master \https://jihulab.com/api/v4/projects/103863/trigger/pipeline

只运行project-a的build_job项目,此时

GLOBAL_VAR继承群组级设置的变量;

PROJECT_VAR在当前pipeline中有定义,因此会打印;

TRIGGER_VAR在当前pipeline中有定义,因此会打印。
在这里插入图片描述

3.2 场景2: 传参数,并覆盖当前流水线的变量

curl -X POST \--fail \-F token=glptt-30f3a36ac8f789cff5404f92d1d0a0be61d48491 \-F ref=master \-F variables[GLOBAL_VAR]="123" \-F variables[PROJECT_VAR]="456" \-F variables[TRIGGER_VAR]="789" \https://jihulab.com/api/v4/projects/103863/trigger/pipeline

只运行project-a的build_job项目,此时

GLOBAL_VAR继承群组级设置的变量;

PROJECT_VAR在当前pipeline中有定义,因此会打印;

TRIGGER_VAR在当前pipeline中有定义,因此会打印。
在这里插入图片描述

3.3 场景3:触发项目b和c,不传入trigger参数

curl -X POST \--fail \-F token=glptt-30f3a36ac8f789cff5404f92d1d0a0be61d48491 \-F ref=master \-F variables[PROJECT_LIST]="project-b,project-c" \https://jihulab.com/api/v4/projects/103863/trigger/pipeline

Project-b(由于在pipeline的项目b的job段定义了变量,因此变量也继承了下来)
在这里插入图片描述
Project-c(由于在pipeline的全局定义了变量,因此变量也继承了下来)
在这里插入图片描述

3.4 场景4:触发项目b和c,传入trigger参数

curl -X POST \--fail \-F token=glptt-30f3a36ac8f789cff5404f92d1d0a0be61d48491 \-F ref=master \-F variables[TRIGGER_VAR]="customer success" \-F variables[PROJECT_LIST]="project-b,project-c" \https://jihulab.com/api/v4/projects/103863/trigger/pipeline

project-b(在pipeline中定义项目b的job段定义了变量,且使用了forwaord:pipeline_variables,传入的变量可以覆盖了job中定义的variables)
在这里插入图片描述
project-c(由于在pipeline中未定义c的变量,而全局定义了变量,且使用了forwaord:yaml_variables,因此将pipeline全局中的变量继承传递了下来)
在这里插入图片描述

3.5 场景5: 触发项目b和c,传入trigger参数(验证)

调整project-a的ci文件

stages:- build- trigger#variables: # default variables for each job
#  GLOBAL_VAR: haha
#  PROJECT_VAR: xixi
#  TRIGGER_VAR: hehebuild_job:stage: buildscript:- echo "$GLOBAL_VAR $PROJECT_VAR $TRIGGER_VAR"trigger_project-b:stage: triggervariables:GLOBAL_VAR: haha123PROJECT_VAR: xixi456TRIGGER_VAR: hehe789trigger:project: cs-test-group1/kxwang/pipeline-trigger/project-bbranch: master#include:#  #- cs-test-group1/kxwang/pipeline-trigger/centralized-ci/template/common-temp.yml#  #- cs-test-group1/kxwang/pipeline-trigger/project-b/.gitlab-ci.yml'#  - project: cs-test-group1/kxwang/pipeline-trigger/project-b#    ref: master#    file: '.gitlab-ci.yml'strategy: dependforward:yaml_variables: truerules:- if: '$PROJECT_LIST =~ /.*project-b.*/'trigger_project-c:stage: triggervariables:TRIGGER_VAR: hehetrigger:project: cs-test-group1/kxwang/pipeline-trigger/project-cbranch: master#include:#  #- cs-test-group1/kxwang/pipeline-trigger/centralized-ci/template/common-temp.yml#  - project: cs-test-group1/kxwang/pipeline-trigger/project-c#    ref: master#    file: '.gitlab-ci.yml'strategy: dependforward:pipeline_variables: true#  GLOBAL_VAR: haha#  PROJECT_VAR: xixi#  TRIGGER_VAR: heherules:- if: '$PROJECT_LIST =~ /.*project-c.*/'

再次触发

curl -X POST \--fail \-F token=glptt-30f3a36ac8f789cff5404f92d1d0a0be61d48491 \-F ref=master \-F variables[TRIGGER_VAR]="customer success" \-F variables[PROJECT_LIST]="project-b,project-c" \https://jihulab.com/api/v4/projects/103863/trigger/pipeline

project-b(在pipeline中定义项目b的job段定义了变量,且使用了forwaord:yaml_variables,传入的变量不会覆盖了job中定义的variables)
在这里插入图片描述
project-c(由于在pipeline中未定义c的变量,而全局定义了变量,且使用了forwaord:pipeline_variables,因此将pipeline全局中的变量覆盖后传递了下来)
在这里插入图片描述

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

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

相关文章

火星探索:技术挑战与前沿进展

火星探索:技术挑战与前沿进展 一、引言 火星,这颗红色的星球,长久以来一直吸引着人类的目光。随着科技的飞速发展,火星探索已经从纯粹的科幻梦想逐渐转变为现实的研究课题。然而,火星探索仍然面临着诸多技术挑战。本文将深入探讨火星探索的关键技术、现有技术瓶颈以及前沿…

从零构建属于自己的GPT系列1:数据预处理(文本数据预处理、文本数据tokenizer、逐行代码解读)

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

记一次若依二开的简单流程

记一次若依二开的简单流程 前言: 搞Java后端的应该都知道若依框架,是一个十分强大且功能齐全的开源的快速开发平台,且毫无保留给个人及企业免费使用。很多中小型公司会直接在该系统上进行二次开发使用。本文记录一次使用若依二开零编码的简单实现&#…

JavaScript变量的小驼峰命名法

什么是小驼峰命名法 JavaScript中变量的小驼峰命名法,一般指的是JavaScript的变量的名称或函数的名称采用大小写字母搭配的方式进行命名,比如:folowerName、studentAge,其中N和A是大写的。 小驼峰命名变量的用处是什么 浏览器执…

Python安装步骤介绍

本文将介绍Python安装的详细步骤如下: 下载 python安装 python配置环境变量(安装时勾选配置环境变量的则无需此步骤) 一、python下载 官网:Download Python | Python.org 根据电脑位数下载所需的版本 二、Python安装 1.打开安…

C++实现ATM取款机

C实现ATM取款机 代码:https://mbd.pub/o/bread/ZZeZk5Zp 1.任务描述 要求:设计一个程序,当输入给定的卡号和密码(初始卡号和密码为123456) 时,系统 能登录 ATM 取款机系统,用户可以按照以下规则进行: 查询…

硬币堆算法分析

题目描述&#xff1a; Description 桌上有 n 堆硬币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有硬币的最少次数。 Input 第一行输入硬币数组长度 第二行输入硬币个数 0< coins长度…

dynamic-datasource多数据源事务

Spring 事务管理分为编程式和声明式两种 编程式事务指的是通过编码方式实现事务&#xff1b;声明式事务基于 AOP&#xff0c;将具体的逻辑与事务处理解耦(编程式事务在这边不做过多陈述)。 声明式事务有两种方式&#xff0c;一种是在配置文件&#xff08;XML&#xff09;中做相…

JavaWeb 添加页面和用户图像展示

add.jsp&#xff08;需要登录之后才可以访问 &#xff09; -> 不是和login.jsp同级了那就 在images目录下加上默认图像 js目录下加入common.js javaWeb项目中&#xff0c;页面的路径 img的src form的action link的href script的src a的href推荐使用绝对路径 这个绝对路径…

网络和Linux网络_7(传输层)UDP和TCP协议(端口号+确认应答+超时重传+三次握手四次挥手)

目录 1. 重看端口号 1.1 端口号的概念 1.2 端口号的划分 2. 重看UDP协议 2.1 UDP协议格式 2.2 UDP的特点 3. 重看TCP协议 3.1 TCP协议格式 3.2 TCP的解包分用 3.3 TCP的可靠性及机制 3.3.1 确认应答ACK机制 3.3.2 超时重传机制 3.3.3 连接管理机制&#xff08;三次…

kgma转换flac格式、酷狗下载转换车载模式能听。

帮朋友下载几首歌到U盘里、发现kgma格式不能识别出来&#xff0c;这是酷狗加密过的格式&#xff0c;汽车不识别&#xff0c;需要转换成mp3或者flac格式&#xff0c;网上的一些辣鸡软件各种收费、限制、广告&#xff0c;后来发现一个宝藏网站&#xff0c;可以在线免费转换成flac…

二分答案 2023山东省赛 Fast and Fat

[P9559 SDCPC2023] Fast and Fat - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;最小值最大&#xff0c;二分答案。 发现对于 w i ≥ w j w_i \ge w_j wi​≥wj​时&#xff0c;第 i i i个人速度不变&#xff0c;还是 v i v_i vi​&#xff0c;但是第 j j j…

【专题】【数列极限】

【整体思路】 【常用不等式】

【Python-随笔】使用Python实现屏幕截图

使用Python实现屏幕截图 环境配置 下载pyautogui包 pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/下载OpenCV包 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/下载PyQT5包 pip install PyQt5 -i https://pypi.tuna.tsi…

目标检测算法改进系列之添加SCConv空间和通道重构卷积

SCConv-空间和通道重构卷积 SCConv&#xff08;空间和通道重构卷积&#xff09;的高效卷积模块&#xff0c;以减少卷积神经网络&#xff08;CNN&#xff09;中的空间和通道冗余。SCConv旨在通过优化特征提取过程&#xff0c;减少计算资源消耗并提高网络性能。该模块包括两个单…

【LangChain实战】开源模型学习(1)-ChatGLM2-6B

介绍 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&#xff1a; 更强大的性能&#xff1a;基于 ChatGLM 初代模型的开发经验&#xff0c…

《python每天一小段》--(1)与GPT-3.5-turbo 模型进行对话

对话如图&#xff1a; 配置环境变量 APIKey如何获得这边不做说明 在Windows操作系统中&#xff0c;你可以按照以下步骤设置环境变量&#xff1a; 打开“控制面板”。在控制面板中&#xff0c;选择“系统和安全”。选择“系统”。在系统窗口中&#xff0c;选择“高级系统设置”…

了解ThreadLocal的原理吗

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

麒麟系统自定义服务-开机自启-配置方案

方法一 &#xff1a;使用systemd的service文件自定义开机启动服务 一、kylin 添加自定义脚本服务说明 在kylin 下&#xff0c;使用管理unit的方式来控制开机自启动服务和添加自定义脚本服务。在/usr/lib/systemd/system目录下包含了各种unit文件&#xff0c;有service后缀的服…

【云原生Prometheus篇】Prometheus PromQL语句详解 1.0

文章目录 一、前言1.1 Prometheus的时间序列1.1.1 指标名称1.1.2 标签1.1.3 使用的注意事项 1.2 样本数据格式1.3 Prometheus 的聚合函数 二 、PromQL 理论部分2.1 PromQL简介2.2 PromQL的数据类型2.3 时间序列选择器2.3.1 瞬时向量选择器 &#xff08;Instant Vector Selector…