GitLab 有一个超级健壮的 API。这可能是去这里的方式。
条款
我确实想在某些术语上进行标准化,以便确保我的建议是有意义的。您说您stages
正在并行运行 - 但它是jobs
在给定 stage
的. 对于我的回应,我将假设您的意思是您在包含 3 个工作的“内部回购”上只有一个阶段。
设置
stage
在包含单个作业的“内部存储库”中创建第二个。
- 第二阶段中的单个作业将作为同步器工作,因为在第一阶段中的所有作业完成之前第二阶段不会开始。
- 该作业应该有一个活动,即使用 GitLab 作业 API 调用您的“外部管道”。您将配置一个触发器来播放设置为仅手动的作业。https://docs.gitlab.com/ee/ci/triggers/
- 将“外部作业”配置为
manual: true
。这将阻止他们在获得批准之前开始
例子
stages:
- test
- remote_trigger
Linter:
script:
- echo "I linted lol!"
stage: test
Security Check:
script:
- echo "I so secure!"
stage: test
Start Terraform:
script:
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master "https://gitlab.example.com/api/v4/projects/9/trigger/pipeline"
stage: remote_trigger
这将在 2 个阶段创建 3 个作业 - 一旦第一阶段中的所有并行作业(安全检查和 linter)完成,Terraform 步骤就可以开始了。