由于我的跨项目管道也是有意运行的,是否也可以在下游管道中运行所有手动作业?
通过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的完成