是否可以让 gitlab CI 触发另一个管道?

Doc*_*Who 7 automation qa gitlab-ci

我是 gitlab CI 的新手,所以我仍在尝试解决它,但我想知道是否可以执行以下操作?

开发人员在 REPO A 中工作

REPO B 中的 QA 工作

当来自 REPO A 的管道启动时,是否可以使用命令触发来自 REPO B 的管道并传递变量?

这样,REPO A 中的开发人员可以在他们的项目部分工作,例如登录表单,但 REPO B 可以包含所有功能的整个端到端测试套件,因此如果一个新团队成立并在 REPO C 上工作,他们也可以触发REPO B 中的测试。

这意味着 QA 总是在一个 repo 中工作,如果另一个 repo 想要进行部署,他们可以调用他们的测试子集,但夜间 REPO B 可以使用不同的浏览器、设备等运行完整的端到端套件。

sec*_*tor 22

“下游管道”中有“多项目管道”的概念,它完全允许您想要的行为。

请参阅: https ://docs.gitlab.com/ee/ci/pipelines/downstream_pipelines.html#multi-project-pipelines

在你的情况下,这将在项目 A 和 B 中

externalTest: 
    variables: 
        ENVIRONMENT: aVariableValue
    stage: deploy 
    trigger: 
        project: my-namespace/repo-b
Run Code Online (Sandbox Code Playgroud)

  • 尽管 GitLab 文档中不是很清楚,但了解使用“trigger”关键字的此功能仅适用于 Premium GitLab 用户帐户是有帮助的。它不适用于“免费”用户帐户。https://docs.gitlab.com/ee/ci/multi_project_pipelines.html https://gitlab.com/gitlab-org/gitlab/-/issues/199224 https://gitlab.com/gitlab-org/gitlab-福斯/-/问题/63497 (3认同)
  • @whitestryder 此功能现在免费。如果你问我的话那就太好了!它就是有效的。 (3认同)

Ami*_*hah 7

在通过API触发管道的文档中有一种方法,它使我们能够在当前运行的管道中使用GitLab API触发另一个管道:

这种触发方式只能在 .gitlab-ci.yml 内部调用时使用,并且它会创建在管道图上可见的依赖管道关系。例如:

build_docs:   
    stage: deploy   
    script:
        - curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.example.com/api/v4/projects/9/trigger/pipeline   
    only:
        - tags
Run Code Online (Sandbox Code Playgroud)

以这种方式触发的管道还会公开一个特殊变量: CI_PIPELINE_SOURCE=pipeline

如果您想从REPO AREPO C触发REPO B管道,请记住,您必须替换上述 URL 中的REPO B项目 id,而不是示例 id。