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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
10 0
|
1天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
10 0
|
2月前
|
数据可视化 jenkins 测试技术
GitLab CI/CD 和 Jenkins对比
8月更文挑战第25天
121 5
|
2月前
|
数据安全/隐私保护
CI/CD笔记.Gitlab系列.新用户管理
CI/CD笔记.Gitlab系列.新用户管理
30 1
|
1月前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
|
2月前
|
存储 Ubuntu jenkins
CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse
CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse
93 0
|
5月前
|
Linux 应用服务中间件 网络安全
linux安装Gitlab
linux安装Gitlab
151 0
|
2月前
|
Shell Docker 容器
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
|
3月前
|
Devops 持续交付 开发工具
入职必会-开发环境搭建54-GitLab下载和安装
GitLab 是一个基于 web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成等功能,是一个综合的 DevOps 平台。用户可以使用 GitLab 托管他们的代码仓库,并利用其丰富的功能来管理和协作开发项目。 以下是 GitLab 的一些主要特点和功能。
入职必会-开发环境搭建54-GitLab下载和安装
|
2月前
|
Ubuntu 安全 网络安全
在Ubuntu 16.04上安装和配置GitLab的方法
在Ubuntu 16.04上安装和配置GitLab的方法
51 0

相关实验场景

更多