使用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:latest

build1:
  stage: build
  script:
    - echo "Do your build here"

test1:
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"
    - echo "$GLOBAL_VAR $PROJECT_VAR $TRIGGER_VAR"

deploy1:
  stage: deploy
  script:
    - echo "Do your deploy here"

2.3 project-b和project-c ci文件

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

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

stages:
    - build
    - trigger
variables:
  GLOBAL_VAR: haha
  PROJECT_VAR: xixi
  TRIGGER_VAR: hehe

build_job:
    stage: build
    script:
        - echo "$GLOBAL_VAR $PROJECT_VAR $TRIGGER_VAR"
        
trigger_project-b:
  stage: trigger
  variables: # default variables for each job
    GLOBAL_VAR: haha123
    PROJECT_VAR: xixi456
    TRIGGER_VAR: hehe789
  trigger:
    project: cs-test-group1/kxwang/pipeline-trigger/project-b
    branch: 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: depend
    forward:
        pipeline_variables: true
  rules:
    - if: '$PROJECT_LIST =~ /.*project-b.*/'

trigger_project-c:
  stage: trigger
  trigger:
    project: cs-test-group1/kxwang/pipeline-trigger/project-c
    branch: 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: depend
    forward:
        yaml_variables: true
    #  GLOBAL_VAR: haha
    #  PROJECT_VAR: xixi
    #  TRIGGER_VAR: hehe
  rules:
    - 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: hehe

build_job:
    stage: build
    script:
        - echo "$GLOBAL_VAR $PROJECT_VAR $TRIGGER_VAR"

trigger_project-b:
  stage: trigger
  variables:
    GLOBAL_VAR: haha123
    PROJECT_VAR: xixi456
    TRIGGER_VAR: hehe789
  trigger:
    project: cs-test-group1/kxwang/pipeline-trigger/project-b
    branch: 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: depend
    forward:
        yaml_variables: true
  rules:
    - if: '$PROJECT_LIST =~ /.*project-b.*/'

trigger_project-c:
  stage: trigger
  variables:
    TRIGGER_VAR: hehe
  trigger:
    project: cs-test-group1/kxwang/pipeline-trigger/project-c
    branch: 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: depend
    forward:
        pipeline_variables: true
    #  GLOBAL_VAR: haha
    #  PROJECT_VAR: xixi
    #  TRIGGER_VAR: hehe
  rules:
    - 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全局中的变量覆盖后传递了下来)
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树遍历及应用

文章目录 前言构建二叉树前序遍历中序遍历后序遍历二叉树的结点个数二叉树的叶节点个数二叉树的高度二叉树第K层结点个数 前言 二叉树的遍历及应用主要是运用了递归、分治的思想。在这一篇文章,小编将介绍二叉树的前序遍历、中序遍历、后序遍历,求二叉树…

renpy-renpy对话内容汉化

文章目录 前言思路实现1,提取对话内容2,汉化对话内容文件3,修改gui文件,使得renpy游戏支持中文显示 前言 最近下载了一些renpy视觉小说内容,发现对话都为英文,因此我在想能否提取出这些对话然后汉化后再封装回原文件,将其汉化 当然汉化过程是机器翻译,汉化其他语言同理,大概5分…

根文件系统构建-对busybox进行配置

一. 简介 本文来学习 根文件系统的制作中,关于 busybox的配置。 本文继上一篇 busybox中文支持的设置,地址如下: 根文件系统构建-busybox中文支持-CSDN博客 二. 根文件系统构建-busybox配置 1. 配置 busybox 与我们编译 Uboot 、 Lin…

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

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

详解递归锁,以及递归锁与其他同步机制的区别

什么是递归锁 递归锁是一种多线程同步机制,用于解决线程在多次获取同一个锁时产生死锁的问题。在递归锁中,同一个线程可以多次获取同一个锁,而不会造成死锁。 递归锁具有两个主要操作:上锁(lock)和解锁&a…

OpenCV技术应用(5)— 将一幅图像均分成4幅图像

前言:Hello大家好,我是小哥谈。本节课就手把手教你如何将一幅图像均分成4幅图像,希望大家学习之后能够有所收获~!🌈 目录 🚀1.技术介绍 🚀2.实现代码 🚀1.技术介绍 如果将下图…

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(三)

文章目录 第六章 通过认证帧定时实现VulCAN的非once同步6.1 问题陈述6.2 方法概述6.3 动机和缺点6.3.1 认证帧定时隐蔽通信6.3.2 VulCAN 的 vatiCAN后端 Nonce同步的应用【这块是一点没看明白】 6.4 设计与实现6.4.1发送方6.4.2 接收方6.4.3 设计参数配置6.4.4 实现 6.5 安全注…

linux复习笔记06(小滴)

演练企业静态ip地址配置过程 我们有时候会发现,在使用虚拟机的时候,如果使用远程连接工具,我们会发现,有时候连接不上去,但是我们去用ifconfig去查看的时候,我们发现是ip地址换了。所以往往我们也需要去固…

SVN下载使用和说明

一、SVN <1>SVN的简介 1、svn是什么&#xff1f; 2、作用 3、基本操作 <2>服务器端的软件下载和安装 1、下载 2、查看环境变量 3、验证安装是否成功 <3>创建项目版本库 1、创建项目版本库&#xff08;svn reponsitory&#xff09; 2、svn版本控制文件说明…

BUUCTF [GXYCTF2019]SXMgdGhpcyBiYXNlPw== 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;解压得到flag.txt文件。 解题思路&#xff1a; 1、打开flag.txt文件&#xff0c;内容如下。 Q2V0dGUgbnVpdCwK SW50ZW5hYmxlIGluc29tbm…

7.C转python

1.对字典的各种操作都是对键来进行的 2.关于字典的遍历操作 例: 还可以这样遍历 所以生成了一个固定模版来遍历字典: 例: 那两个名字可以换 例: 3.合法key的类型: 要求可哈希 在python中,专门提供了一个hash()函数来计算哈希值 例: 有的类型是不能计算哈希的,如:列表,字…

Fabric:创建应用通道

搭建自定义网络可以参考文章&#xff1a; https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后&#xff0c;就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…

QProcess 启动 进程 传参数 启动控制台进程 传参

目录 QProcess 启动外部程序的两种方式 依赖式 分离式&#xff1a; 启动进程前的预处理 设置启动路径 设置启动命令参数 设置启动工作目录 设置启动所需环境&#xff1a; 启动的状态 code smple: QProcess 控制台进程 QProcess启动控制台不显示窗口 注意&#xff1a;…

一、服务器准备

本案例使用VMware Workstation Pro虚拟机创建虚拟服务器来搭建Linux服务器集群&#xff0c;所用软件及版本如下&#xff1a; Centos7.7-64bit 1、三台虚拟机创建 第一种方式&#xff1a;通过iso镜像文件来进行安装(不推荐) 第二种方式&#xff1a;直接复制安装好的虚拟机文…

Linux多核飞控

Linux多核飞控是一种基于多核处理器构建的飞控系统&#xff0c;用于控制飞行器的飞行。这种飞控系统使用Linux操作系统作为主要的控制平台&#xff0c;可以支持多个处理器核心同时工作&#xff0c;以实现更高的性能和更快的响应速度。 Linux通常用于具有较高计算量和较大内存需…

ffmpeg 任意文件读取漏洞/SSRF漏洞 (CVE-2016-1897/CVE-2016-1898)

漏洞描述 影响范围 FFmpeg 2.8.x < 2.8.5FFmpeg 2.7.x < 2.7.5FFmpeg 2.6.x < 2.6.7FFmpeg 2.5.x < 2.5.10 漏洞环境及利用 搭建docker环境 访问8080端口看到上传界面 由于vulhub并没有讲述该漏洞如何复现&#xff0c;我们需要进入环境查看源码 <?php if(!…

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库 1. 专门用来实现一个SPA单页面应用 2 .基于vue的项目基本都会用到此库 SPA的理解 1) 单页Web应用&#xff08;single page web application&#xff0c;SPA&#xff09; 2) 整个应用只有一个完整的页面 3) 点击页面中的链接不会刷新页面, 本…

对于Kotlin DSL的简单解析与使用

DSL(领域特定语言)是Kotlin所带来的强大语法特性之一&#xff0c;也是Java中所不存在的功能&#xff0c;JetBrain也基于DSL开发出了众多的开源库&#xff0c;Kotlin的开发者可以使用DSL来重构许多已有的代码&#xff0c;甚至有可能做到彻底抛弃HTML&#xff0c;XML&#xff0c;…

【智能家居】一、工厂模式实现继电器灯控制

用户手册对应的I/O 工厂模式实现继电器灯控制 代码段 controlDevice.h&#xff08;设备设备&#xff09;main.c&#xff08;主函数&#xff09;bathroomLight.c&#xff08;浴室灯&#xff09;bedroomLight.c&#xff08;卧室灯&#xff09;restaurantLight.c&#xff08;餐厅…

2017年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

文章目录 Section I Use of EnglishSection II Reading ComprehensionText 121-细节信息题22-细节信息题23-推断题24-细节信息题25-态度题 Text 226-细节信息题27-细节信息题28-细节信息题29-细节信息题30-细节信息题 Text 331-细节信息题32-细节信息题33-猜词题34-细节信息题3…