1

就我而言,我只想smoke-test在作业成功完成时才运行作业deploy。有一个关键字需要,应该做到这一点。

但是在文档中也写了:

In GitLab 13.9 and older, if needs: refers to a job that might not be added to a pipeline because of only, except, or rules, the pipeline might fail to create.

这正是我的情况(管道甚至没有启动,因为deploy工作不存在)。这项deploy工作是有条件的,使用一个非常复杂的rules条件:

  rules:
    - if: $CI_KUBERNETES_DEPLOYMENT_ENABLED != "true"
      when: never
    - if: $STAGING_CHART_DIRECTORY == ""
      when: never
    - if: $STAGING_NAMESPACE == ""
      when: never
    - if: $CI_REVIEW_DEPLOYMENT_ENABLED != "true" && $CI_MERGE_REQUEST_ID
      when: never
    - if: $CI_MERGE_REQUEST_ID && $CI_COMMIT_REF_PROTECTED == "true"
      when: never
    - when: on_success

我不想rules也为这项工作定义双重条件smoke-test——保持一致性会很痛苦。

在这种情况下,如何简单地说“smoke-test仅在deploy作业成功完成时才运行作业”?这里的最佳做法是什么?

  • 可能在部署作业中设置一些环境变量并在作业中DEPLOY_JOB_SUCCESS=true依赖它smoke-test
  • 或使用一些 yaml 锚(但是在这种情况下,管道定义不在一个 yaml 文件中)
  • 或者是其他东西?

我会感谢任何提示:)

// gitlab 版本:GitLab 企业版 14.4.2-ee

4

2 回答 2

3

这不是您正在寻找的东西,但是有一种方法可以避免两次维护规则。实际上有3种方式:)

  1. 使用 extends aka 继承 - 你定义规则并从中扩展

.rules:
   rules:
     - if: ....

deploy:
   extends:
     - .rules

smoke-test:
   extends:
     - .rules
  1. 参考 - 又名作文 - https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html#reference-tags

deploy:
   rules:
     - if: ....

smoke-test:
   rules:
     - !reference ['deploy', rules]
  1. yaml 锚点

这 3 种方法可以让您轻松地重用规则,并且应该可以帮助您解决问题

于 2021-11-18T10:20:40.910 回答
0

我认为您可以使用触发器功能来创建执行该smoke-test步骤的子管道,请参见此处此处

基本上,下游管道将由您的deploy步骤触发并执行两个步骤(deploysmoke-test

于 2021-11-18T09:50:51.837 回答