.gitlab-ci.yml我们能否从curl捕获响应,然后有选择地运行以下阶段?

.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文件中有选择地运行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-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的脚本以正确调用端点