使用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.rhkb.cn/news/208347.html

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

相关文章

软件测试人员掌握哪些技术可以立马跳槽涨薪?

1、文档能力:各种文档的编写能力 因为不管是功能测试工程师还是自动化测试工程师都必须要跟各种文档打交道,所以最基本的需要掌握一些常用的文档编辑的使用,比如说 常用编写测试用例的工具:excel表格或者wps等 编写需求分析需要…

2分图匹配算法

定义 节点u直接无边,v之间无边,边只存在uv之间。判断方法:BFS染色法,全部染色后,相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min(u, v)。贪心算法可能导致&…

redis运维(二十二)redis 的扩展应用 lua(四)

一 最佳实践 ① 铺垫 最佳实践:1、把redis操作所需的key通过KEYS进行参数传递2、其它的lua脚本所需的参数通过ARGV进行传递. redis lua脚本原理 Redis Lua脚本的执行原理 ② 删除指定的脚本缓存 ③ redis集群模式下使用lua脚本注意事项 1、常见报错现象 C…

【开源】基于JAVA语言的考研专业课程管理系统

项目编号: S 035 ,文末获取源码。 \color{red}{项目编号:S035,文末获取源码。} 项目编号:S035,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高…

接口性能测试 —— Jmeter并发与持续性压测

接口压测的方式: 1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数 2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种…

【安装指南】MySQL和Navicat下载、安装及使用详细教程

目录 ⛳️1.【MySQL】安装教程 1.1 获取下载包 1.2 MySQL安装 1.2.1 MySQL工具安装 1.2.2 MySQL环境变量 1.2.3 验证MySQL安装成功 ⛳️2.【Navicat-v15】的安装和无限使用 ⛳️3.【测试Navicat连接MySQL】 ⛳️1.【MySQL】安装教程 1.1 获取下载包 前往官网获取压缩包…

C++入门篇(零) C++入门篇概述

目录 一、C概述 1. 什么是C 2. C的发展史 3. C的工作领域 4. C关键字(C98) 二、C入门篇导论 一、C概述 1. 什么是C C是基于C语言而产生的计算机程序设计语言,支持多重编程模式,包括过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计和设计模式…

UIkit-UIAlertContent

简单Demo //注意!!!必须放在viewController的viewDidAppear里面,viewDidLoad里面不行 - (void)viewDidAppear:(BOOL)animated {// 创建 UIAlertControllerUIAlertController *alertController [UIAlertController alertControll…

MySQL系列 - 数据类型

MySQL是一种常用的关系型数据库管理系统,它支持多种数据类型,包括整数、浮点数、字符串、日期和时间等。在本文中,我们将介绍MySQL中常用的数据类型及其用法。 MySQL数据类型介绍: 1、整数类型: MySQL提供了多种整数…

Ubuntu 22.04安装Go 1.21.4编译器

lsb_release -r看到操作系统版本是22.04,uname -r看到内核版本是uname -r。 sudo wget https://studygolang.com/dl/golang/go1.21.4.linux-amd64.tar.gz下载编译器。 sudo tar -zxf go1.21.4.linux-amd64.tar.gz -C /goroot将文件解压到/goroot目录下,这个命令…

【虚拟机】在VM中安装 CentOS 7

1.2.创建虚拟机 Centos7是比较常用的一个Linux发行版本,在国内的使用比例还是比较高的。 大家首先要下载一个Centos7的iso文件,我在资料中给大家准备了一个mini的版本,体积不到1G,推荐大家使用: 我们在VMware《主页》…

【EasyExcel实践】导出多个sheet到多个excel文件,并压缩到一个zip文件

文章目录 前言正文一、项目依赖二、封装表格实体和Sheet实体2.1 表格实体2.2 Sheet实体 三、核心实现3.1 核心实现之导出为输出流3.2 web导出3.3 导出为字节数组 四、调试4.1 构建调试用的实体类4.2 控制器调用4.3 测试结果 五、注册大数转换器,长度大于15时&#x…

rtmp 协议详解

1. handshake 1.1 概述 rtmp 连接从握手开始。它包含三个固定大小的块。客户端发送的三个块命名为 C0,C1,C2;服务端发送的三个块命名为 S0,S1,S2。 握手序列: 客户端通过发送 C0 和 C1 消息来启动握手过程。客户端必须接收到 S1 消息,然后…

阵列信号处理---频率-波数响应和波束方向图

波束延迟求和器 阵列是由一组全向阵元组成,阵元的位置为 p n p_n pn​,如下图所示: 阵元分别在对应的位置对信号进行空域采样,这样就产生了一组信号信号为 f ( t , p ) f(t,p) f(t,p),具体表示如下: f ( t , p ) [ f…

一些ab命令

1.ab简介 ab是apache自带的压力测试工具,是apachebench命令的缩写。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器如nginx、tomcat、IIS等进行压力测试。 ab的原理:ab命令会创建多个并发…

锐捷EWEB网管系统 RCE漏洞复现

0x01 产品简介 锐捷网管系统是由北京锐捷数据时代科技有限公司开发的新一代基于云的网络管理软件,以“数据时代创新网管与信息安全”为口号,定位于终端安全、IT运营及企业服务化管理统一解决方案。 0x02 漏洞概述 Ruijie-EWEB 网管系统 flwo.control.ph…

Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新

前言 本篇博客是python开发的工具篇相关,介绍pycharm的使用和相关配置,收录python的相关操作,比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…

计算机网络扫盲(2)——网络边缘

一、概述 在计算机网络得到术语中,我们把与因特网相连的计算机或其他设备称为端系统(或者主机),如下图所示,因为它们位于因特网的边缘,所以被称为端系统。因特网的端系统包括了桌面计算机&#xff…

springboot集成邮箱验证功能

准备工作 开启SMTP服务 前往你的邮箱网站,以网易邮箱为例,打开网易邮箱地址,登录你的邮箱,进入邮箱管理后台界面。点击“设置”》》“POP3/SMTP/IMAP”后,点击开启SMTP服务即可。 技术实现 Spring Boot 发送邮件验证…

Edge 旧版本回退

微软官网 下载策略文件 下载后,解压打开 cad 包,把里面的 Windows\ADMX\ 下 3 个 *.admx 文件解压到 C:\Windows\PolicyDefinitions Windows\ADMX\zh-CN 下 3 个 *.adlm 文件解压到 C:\Windows\PolicyDefinitions\zh-CN Windows 搜索 gpedit&#xff…