如何在 gitlab 管道 "wait" 中制作外部阶段,直到完成所有 gitlab 内部阶段?
How to make external stages in gitlab pipeline "wait" until all the gitlab internal stages are done?
我在gitlab-ci.yml中定义了3个阶段。当有新的提交时,管道 运行s 和这 3 个阶段 运行 并行,这是预期和需要的。 (这些阶段 运行 先决条件步骤,例如对代码和其他 linting 功能的安全检查)。我还有 Scalr(另一个提供商)将外部阶段注入同一个管道(这些 运行 terraform 策略检查和计划并应用)。
但是,问题在于这些外部阶段与上述内部阶段并行启动。我希望 gitlab 暂停任何执行外部阶段,直到内部(预请求)阶段完成后。
如果您想知道,运行将 terraform 计划并应用为 gitlab 内部阶段不是一种选择。
无论如何要完成这个?
GitLab 拥有超级强大的 API。这可能是去这里的路。
条款
我确实想对某些术语进行标准化,以确保我的建议有意义。你说你的 stages
是 运行 并联的-但是 jobs
运行 在 given stage
。对于我的回答,我假设您的意思是您在 'internal repo' 上有一个 单阶段 ,其中包含 3 个作业。
设置
- 在您的 'internal repository' 中创建第二个
stage
,其中包含一个作业。
- 第二阶段中的这个单一作业将用作同步器,因为第二阶段只有在第一阶段中的所有作业完成后才会开始。
- 这个作业应该有一个 activity,它使用 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 步骤就可以开始了。
我在gitlab-ci.yml中定义了3个阶段。当有新的提交时,管道 运行s 和这 3 个阶段 运行 并行,这是预期和需要的。 (这些阶段 运行 先决条件步骤,例如对代码和其他 linting 功能的安全检查)。我还有 Scalr(另一个提供商)将外部阶段注入同一个管道(这些 运行 terraform 策略检查和计划并应用)。
但是,问题在于这些外部阶段与上述内部阶段并行启动。我希望 gitlab 暂停任何执行外部阶段,直到内部(预请求)阶段完成后。
如果您想知道,运行将 terraform 计划并应用为 gitlab 内部阶段不是一种选择。
无论如何要完成这个?
GitLab 拥有超级强大的 API。这可能是去这里的路。
条款
我确实想对某些术语进行标准化,以确保我的建议有意义。你说你的 stages
是 运行 并联的-但是 jobs
运行 在 given stage
。对于我的回答,我假设您的意思是您在 'internal repo' 上有一个 单阶段 ,其中包含 3 个作业。
设置
- 在您的 'internal repository' 中创建第二个
stage
,其中包含一个作业。 - 第二阶段中的这个单一作业将用作同步器,因为第二阶段只有在第一阶段中的所有作业完成后才会开始。
- 这个作业应该有一个 activity,它使用 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 步骤就可以开始了。