.gitlab-ci.yml我们能否从curl捕获响应,然后有选择地运行以下阶段?
我需要在单个.gitlab-ci.yml文件中有选择地运行stage,而选择由调用gitlab api的第一个stage完成 下面是简化的代码。最后,只有工作1、3、5、7、9应该在管道中进行:-.gitlab-ci.yml我们能否从curl捕获响应,然后有选择地运行以下阶段?,gitlab,gitlab-ci,Gitlab,Gitlab Ci,我需要在单个.gitlab-ci.yml文件中有选择地运行stage,而选择由调用gitlab api的第一个stage完成 下面是简化的代码。最后,只有工作1、3、5、7、9应该在管道中进行:- .gitlab ci.yml: stages: - select - deploy select-targets: stage: select script: - curl "project_id=$CI_PROJECT_ID" -X POST https://some-ap
.gitlab ci.yml
:
stages:
- select
- deploy
select-targets:
stage: select
script:
- curl "project_id=$CI_PROJECT_ID" -X POST https://some-api-endpoint
- return some result e.g. [1, 3, 5, 7, 9]
job1:
stage: deploy
script:
- to deploy job 1
only:
- curl return has 1
job2:
stage: deploy
script:
- to deploy job 2
only:
- curl return has 2
job3:
stage: deploy
script:
- to deploy job 3
only:
- curl return has 3
... repeat for job 4 to job 9, now skipped for simplicity
这个想法可能吗?您可以使用触发管道。因此,我们的想法是使用api调用的响应来触发传递变量“jobX”的管道。在每个编号的
作业
中,如果$trigered\u作业
具有所需的值,则仅允许执行作业。如果定义了$TRIGERRED\u作业
触发管道,则的除外:
关键字用于选择目标
避免执行
我成功地测试了此配置:
stages:
- select
- deploy
select-targets:
stage: select
script:
- JOB_ID=$(shuf -i1-3 -n1)
- echo "$JOB_ID"
- curl -Ss --request POST --form token=${CI_JOB_TOKEN} --form ref=master --form "variables[TRIGERRED_JOB]=job$JOB_ID" "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
except:
variables:
- $TRIGERRED_JOB
job_1:
stage: deploy
script:
- echo "job 1"
only:
variables:
- $TRIGERRED_JOB == "job1"
job_2:
stage: deploy
script:
- echo "job 2"
only:
variables:
- $TRIGERRED_JOB == "job2"
job_3:
stage: deploy
script:
- echo "job 3"
only:
variables:
- $TRIGERRED_JOB == "job3"
调整select targets
job的脚本以正确调用端点