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

简介: 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


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
IDEA第一次上传项目到gitlab
IDEA第一次上传项目到gitlab步骤
|
3月前
|
程序员 开发工具 git
【实测】gitlab/github 如何过滤项目内的文件
【实测】gitlab/github 如何过滤项目内的文件
|
4月前
|
开发工具 git
hbuilderX安装git插件→拉取线上gitlab项目
hbuilderX安装git插件→拉取线上gitlab项目
|
9月前
gitlab删除项目
gitlab删除项目
318 0
|
4月前
|
缓存 JavaScript 前端开发
GitLab 官网使用 pages 服务,发布 vue 前端项目
GitLab 官网使用 pages 服务,发布 vue 前端项目
|
5月前
|
jenkins 网络安全 持续交付
微服务轮子项目(44) -GitLab代码仓库
微服务轮子项目(44) -GitLab代码仓库
61 0
|
5月前
|
Linux 开发工具 git
淘东电商项目(07) -GitLab简介以及Docker部署
淘东电商项目(07) -GitLab简介以及Docker部署
72 0
|
6月前
|
前端开发 Java jenkins
Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退
Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退
253 0
|
6月前
|
Java jenkins 应用服务中间件
Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)
Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)
|
6月前
|
jenkins 应用服务中间件 持续交付
Jenkins+Gitlab+Nginx实现自动发布与回退基于tag版本的静态项目(解决重复构建问题)
Jenkins+Gitlab+Nginx实现自动发布与回退基于tag版本的静态项目(解决重复构建问题)

相关实验场景

更多