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

时间:2020-06-11 13:06:40

标签: automation gitlab-ci qa

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

开发人员在REPO A中工作

在REPO B中进行质量检查

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

通过这种方式,REPO A中的开发人员可以在项目中进行工作,例如登录表单,但是REPO B可以包含针对所有功能的整个端到端测试套件,因此,如果组建了一个新团队并从事REPO C工作,他们还可以在REPO B中触发测试。

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

3 个答案:

答案 0 :(得分:1)

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 A REPO C 触发 REPO B 管道,请记住,必须替换 REPO B 项目ID,而不是示例ID。

答案 1 :(得分:1)

有多项目管道的概念,它完全允许您期望的行为。

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

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

from pynput.mouse import Listener

def on_move(x, y):
    pass

def on_click(x, y, button, pressed):
    if pressed:
        # Your code here

def on_scroll(x, y, dx, dy):
    pass

with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
    listener.join()

答案 2 :(得分:1)

@ doctor-wh,请阅读GitLab团队的这篇文章,它会以我需要的方式为我提供帮助。

当有人在REPO B上推送与REPO A相关的代码时,我需要启动REPO A的CI流程,因此这对我很有帮助。

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

希望它会对您有所帮助。