首页 > 其他分享 >gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci

gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci

时间:2023-04-28 22:13:31浏览次数:30  
标签:触发 CI script -- ci echo build test stage

trigger

当我们在运行阶段需要运行下一个项目的流水线时,就可以使用 trigger了

创建一个项目 manage_zz

在里面写个 .gitlab-ci.yml 文件,内容如下

stages: # 指定运行的步骤,没有指定就顺序执行
  - build
  - deploy
  - test
  - rebase

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

test1:  
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite" 

rebase:
  stage: rebase
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
  

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

在另一个项目 LRUNWEB 的 .gitlab-ci.yml 里写上 trigger,内容如下

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push"' # 当为 push 的时候
      when: never # 为 true 时,永远不执行
    - when: always # 为 false 时,永远执行

stages: # 指定运行的步骤,没有指定就顺序执行
  - build
  - deploy
  - test
  - rebase

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

test1:  
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite" 

rebase:
  stage: rebase
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
  

deploy1:
  # tags: 
  #   - k8s
  stage: deploy
  # script:
  #   - echo "Do your deploy here"
  trigger: # 如果是 trigger 时,不需要 tags 和 script,要不然会报错
    project: root/manage_zz # 项目名称
    branch: main # 分支
    strategy: depend # 状态同步

注意:如果是 trigger ,不需要加 tags 和 script。要不然会报错

运行 LRUNWEB 项目,查看流水线

可以看到,在运行 Deploy 阶段的时候,运行了下游的 manage_zz 项目。当下游项目运行成功时, Deploy 阶段也就成功了

点击下游的流水线 id (#27)跳转到下游项目,可以看到下游也触发了流水线

仅通过流水线触发

我们也可以在 manage_zz 项目里,加上 workflow,只有当上游触发的时候才会执行该 pipeline,其他情况下不会执行,加上下面的代码就可以了

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "pipeline"' # 当为 pipeline 的时候才会触发,其他情况下不会触发该流水线,也就是上游在 trigger 里调度该项目
      when: always # 为 true 时,永远执行
    - when: never # 为 false 时,永远不执行

触发同一项目下的其他 ci

上面我们是触发不同项目之间的 ci,我们也可以在同一个项目下创建多个 ci 文件,然后去触发对应的 ci

创建两个目录,test1 和 test2,在两个目录下各创建一个 ci.yml 的文件,文件内容如下

stages: # 指定运行的步骤,没有指定就顺序执行
  - build
  - deploy
  - test
  - rebase

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

test1:
  tags: 
    - k8s  
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite" 

rebase:
  tags: 
    - k8s
  stage: rebase
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
  

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

在根项目的 .gitlab-ci.yml 里调用其他 ci 文件,如下

stages: # 指定运行的步骤,没有指定就顺序执行
  - build
  - test
  - build_test1
  - build_test2

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

test1:  
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite" 


build-test1:
  stage: build
  trigger:
    include: # 运行 test1 目录下的 ci.yml 文件
      - local: test1/ci.yml # 相对路径
    strategy: depend # 状态同步
  rules: # 触发规则,test1 目录下的任何文件改变时触发
    - changes:
      - test1/* # test1 下的任何文件发生改变就执行
      when: always

build-test2:
  stage: build
  trigger:
    include: # 运行 test2 目录下的 ci.yml 文件
      - local: test2/ci.yml  # 相对路径
    strategy: depend # 状态同步
  rules: # 触发规则,test2 目录下的任何文件改变时触发
    - changes:
      - test2/* # test2 下的任何文件发生改变就执行
      when: always

然后在去 test2 目录下新增一个文件,看会不会触发

我创建了一个 hello.go 文件

在去查看流水线

发现只有 build-test2 触发了 ci,因为我们只在 test2 目录下新增了 hello.go 文件,test1 目录下的文件没有改变,所以不会触发 build-test1 的 ci

标签:触发,CI,script,--,ci,echo,build,test,stage
From: https://www.cnblogs.com/zouzou-busy/p/16273045.html

相关文章

  • 关于保险经纪人的那些事儿
    很多人听过保险代理人,却很少听保险经纪人,和明星经纪人有什么关系呢?下吗简单做个介绍❗ ......
  • 每日总结2023-04-28
    今天完成了ANdroid中的找回密码packagecom.example.math;/**找回界面*/importstaticandroid.widget.Toast.LENGTH_SHORT;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;import......
  • ML-误差、偏差、过拟合、正则化
    机器学习在损失函数中加入正则项,称为Regularize正则化。目的是防止过拟合。原理是:加上限制后,缩小了解空间,从而减少过拟合的可能性。L0范数表示向量中非零元素个数,但L0范数的求解是个NP-Hard问题;L1范数也可以实现稀疏,而且更容易求解。L2范数不如L1范数更能够降低复杂度,但是处处可......
  • 6-1 计算捐款总量
    这里需要设计一个捐款人类Donator及一个相关函数getMaxName(),Donator类中包含捐款人的姓名及其捐款额,其部分代码如下:classDonator{private:stringname;//捐款人姓名floatmoney;//捐款金额,单位:元public:voidsetName(string_......
  • CSS知识点总结
    CSS知识点总结文章内容可能较多且杂乱,可以查看页面右方的目录,以及使用Ctrl+F搜索页面内容进行内容定位。常用属性推荐搭配文档使用,可以复制属性名,到文档查看该属性对应的可选值。......
  • 《代码大全》读书笔记3
    第七章是《代码大全》中关于代码优化的章节,对于软件工程师来说,良好的代码优化技能是非常重要的。在这一章中,作者详细介绍了如何进行代码优化,包括性能调整、空间利用、算法和数据结构的优化等方面的内容。通过阅读这一章,我深刻地认识到了代码优化的重要性,并学习了许多实用的技巧和......
  • 《人月神话》读后感 3
      第五章主要介绍了项目的初步探讨,阐述了一个项目在启动之前需要考虑的因素,包括项目的目标、需求、资源、约束等等。读完这一章,我认识到项目启动前的准备工作非常重要,只有在充分考虑所有因素后,才能建立一个可行的计划并确保项目的成功。  第六章是这本书的核心章节之一,主要介......
  • mapbox加载geojson报错error: Style is not done loading
    Mapbox加载GeoJSON地图时,遇到error:Styleisnotdoneloading错误通常是由于地图样式文件没有加载完成引起的。具体来说,可能是因为Mapbox样式文件中包含了某些需要加载的图片或者矢量图层,而这些图片或矢量图层尚未完全加载完成,导致无法渲染地图。为解决此问题,可以尝试以......
  • 「学习笔记」重修最短路
    \(u\)到\(v\)的最短路径的长度就是\(u\)到\(v\)的最短路。单源最短路算法可以求出一个点到其他点的最短路。全源最短路算法可以求出每一个点到其他各点的最短路。松弛操作:dis[v]=min(dis[v],dis[u]+w);。算法Floyd算法全源最短路算法,时间复杂度\(O_{n^3}\),......
  • 【深度学习基础】使用libtorch部署pytorch训练的网络
    下载安装配置:https://pytorch.org/cppdocs/installing.html小例程:https://pytorch.org/cppdocs/frontend.html官方:https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.htmllibtorch的API官网文档:https://pytorch.org/cppdocs/api/library_root.html配置环......