【问题标题】:Is it possible to have gitlab CI trigger another pipeline?是否可以让 gitlab CI 触发另一个管道?
【发布时间】:2020-06-11 13:06:40
【问题描述】:

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

开发人员在 REPO A 中工作

在 REPO B 中进行 QA 工作

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

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

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

【问题讨论】:

    标签: automation gitlab-ci qa


    【解决方案1】:

    有一个多项目管道的概念,它完全允许你想要的行为。

    https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#creating-multi-project-pipelines-from-gitlab-ciyml

    在您的情况下,这将在项目 A 和 C 中

    externalTest: 
        variables: 
            ENVIRONMENT: aVariableValue
        stage: deploy 
        trigger: my-namespace/repo-b
    

    【讨论】:

    【解决方案2】:

    Triggering pipelines through the 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
    

    以这种方式触发的管道也暴露了一个特殊的变量: CI_PIPELINE_SOURCE=pipeline.

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

    【讨论】:

    • 如何为 REPO B 管道指定阶段?例如,当 REPO A 被推送时,我只想在 REPO B 中运行测试阶段
    【解决方案3】:

    @doctor-wh,请阅读 GitLab 团队的这篇文章,它对我有帮助。

    当有人将他们的代码推送到与 REPO A 相关的 REPO B 上时,我需要启动 REPO A 的 CI 过程,所以这对我有惊人的帮助。

    https://docs.gitlab.com/ee/ci/multi_project_pipelines.html

    希望对你有所帮助。

    【讨论】:

    • 有谁知道是否可以验证/知道哪个其他项目启动了触发器?我希望能够验证基于调用者传入的详细信息
    • @cgmckeever 如果您想查看调用触发器后的项目调用链是什么,我建议调用一次触发器,然后您可以轻松看到触发器的可视化路径gitlab CI /CD 管道详细信息。
    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2018-11-23
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多