我在 gitlab-ci.yml 中定义了 3 个阶段。当有新的提交时,管道运行并且这 3 个阶段并行运行,这是预期和需要的。 (这些阶段运行先决步骤,例如对代码和其他 linting 功能的安全检查)。我还让 Scalr(另一个提供者)将外部阶段注入到同一管道中(这些阶段运行 terraform 策略检查以及计划和应用)。
然而,问题在于这些外部阶段与上述内部阶段并行启动。我希望 gitlab 暂停任何执行外部阶段,直到内部(预请求)阶段完成之后。
如果您想知道,运行 terraform 计划并作为 gitlab 内部阶段应用不是一种选择。
无论如何要做到这一点?
答案 0 :(得分:3)
GitLab 有一个超级强大的 API。这可能是去这里的方式。
我确实想对某些术语进行标准化,以便确保我的建议有意义。您说您的 stages
并行运行 - 但它是 jobs
在 given stage
中并行运行。对于我的回答,我将假设您的意思是您在包含 3 个作业的“内部存储库”上有一个单一阶段。
stage
。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 步骤就可以开始了。