触发标记和手动作业的跨项目管道


Gitlab的跨项目管道允许我指定一个分支来运行管道。我没有找到任何这样的选择来对标签做同样的事情?

由于我的跨项目管道也是有意运行的,是否也可以在下游管道中运行所有手动作业?

通过API触发管道应该可以实现这一点。

您只需要将以下内容添加到CI脚本中:

- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.example.com/api/v4/projects/<project-id>/trigger/pipeline

并将ref更新为您需要的标签,并将<project-id>更新为您正在触发的项目。


对于有意运行的跨项目管道,以及在触发时想要运行的手动作业,您可能需要重写下游CI文件以实现这一点,例如:

上游CI文件:

build:
stage: build
script:
- echo "Do some building..."
# Trigger downstream project (tag v1.0.0), with a random variable
- curl --request POST --form "token=$CI_JOB_TOKEN" 
--form "variables[RANDOM_VARIABLE]=FOO" 
--form ref=v1.0.0 https://gitlab.com/api/v4/projects/<project_id>/trigger/pipeline

下游CI文件:

.test:template:
stage: test
script:
- echo "Running some test"
test:manual:
extends:
- .test:template
when: manual
except:
- triggers
test:triggered:
extends:
- .test:template
only:
- triggers

因此,当触发的作业运行时,test:triggered应该是您在管道中看到的唯一test作业。

有关详细信息,请仅查看/不查看文档。

如果要使用触发器作业运行下游管道,可以使用trigger:branch(docs(指定分支或标记

上游管道作业:

job1:
trigger:
project: my-downstream-project
branch: tag-in-downstream-project

下游管道作业

job2:
only:
- pipelines  # Optional
# Rest of the job

在下游管道中,您可以指定只有当管道由上游触发时才应包括作业(在本例中为作业1(。

此外,在使用trigger:strategy: depend时,调用job1中的下游管道可以等待job2的完成

最新更新