运行 一个 CI 作业,仅当另一个手动作业被触发时

Run a CI job only if another manual job was triggered

我有一个 .gitlab-ci.yml 有 2 个部署和一个检查部署的 API 是否可以访问的作业。

stages:
  - deploy-stage
  - deploy-prod
  - check

service:stage:
  stage: deploy-stage

service:production:
  stage: deploy-prod
  when: manual

check:stage:
  stage: check

check:production:
  stage: check
  dependencies: service:production

目前,即使指定了 dependencies,我也有 check:production 运行宁 ,即使 service:production作业被跳过(我没有手动触发它)。

可以allow_failure: false添加到service:production,这样check:production就不是运行(间接的,因为整个pipeline gets halted), 但我更喜欢一种方法来 更明确地表达 check:productionservice:production.

的直接依赖

如何配置check:production到运行自动触发,只有在service:production手动触发?

您可以使用 needs 关键字来说明一项工作需要另一项工作。

stages:
  - deploy-stage
  - deploy-prod
  - check

service:stage:
  stage: deploy-stage

service:production:
  stage: deploy-prod
  when: manual

check:stage:
  stage: check

check:production:
  stage: check
  dependencies: service:production
  needs: ['service:production']

在此示例中,如果 service:production 失败,check:production 不会 运行,这是一项手动作业,尚未 运行,已被跳过,或已取消。

Needs 也可用于在前一阶段的其他不相关作业完成之前将作业告知 运行。这意味着 check:production 可以在 service:production 完成后开始,即使 service:stage 仍然是 运行ning。

这里是有关此关键字和其他关键字的更多信息的文档:https://docs.gitlab.com/ee/ci/yaml/#needs

您可以使用 dependencies 关键字获得类似的结果,但如果其他作业失败或者是未触发的手动作业,依赖作业仍将 运行,并且可能会失败,具体取决于结果第一份工作。 Needs 是更新和改进的选项。