Gitlab CI - 定义对其他条件作业的作业依赖
GitlabCI - define a job dependency on some other conditional job
在我的例子中,我想 运行 作业 smoke-test
只有当作业 deploy
成功完成时。有一个关键字 needs,应该可以做到这一点。
然而在文档中也写着:
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
我不想为 smoke-test
工作定义重复的 rules
条件 - 保持一致性会很痛苦。
如何在这种情况下简单地说“运行 smoke-test
作业仅当 deploy
作业成功完成时”?这里的最佳做法是什么?
- 可能在部署作业
DEPLOY_JOB_SUCCESS=true
中设置一些环境变量并在 smoke-test
作业中依赖它
- 或者使用一些 yaml 锚点(但是在这种情况下,管道定义不在一个 yaml 文件中)
- 还是别的?
如有任何提示,我将不胜感激:)
// gitlab版本:GitLab企业版14.4.2-ee
我认为您可以利用触发器功能来创建执行 smoke-test
步骤的子管道,请参阅 here and there
基本上,下游管道将由您的 deploy
步骤触发并执行两个步骤(deploy
和 smoke-test
)
这不是您要找的东西,但是有一种方法可以避免两次维护规则。实际上有 3 种方式:)
- 使用扩展又名继承 - 您定义规则并从中扩展
.rules:
rules:
- if: ....
deploy:
extends:
- .rules
smoke-test:
extends:
- .rules
deploy:
rules:
- if: ....
smoke-test:
rules:
- !reference ['deploy', rules]
这 3 种方式可以让您轻松地重用规则,并且应该可以帮助您解决问题
在我的例子中,我想 运行 作业 smoke-test
只有当作业 deploy
成功完成时。有一个关键字 needs,应该可以做到这一点。
然而在文档中也写着:
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
我不想为 smoke-test
工作定义重复的 rules
条件 - 保持一致性会很痛苦。
如何在这种情况下简单地说“运行 smoke-test
作业仅当 deploy
作业成功完成时”?这里的最佳做法是什么?
- 可能在部署作业
DEPLOY_JOB_SUCCESS=true
中设置一些环境变量并在smoke-test
作业中依赖它 - 或者使用一些 yaml 锚点(但是在这种情况下,管道定义不在一个 yaml 文件中)
- 还是别的?
如有任何提示,我将不胜感激:)
// gitlab版本:GitLab企业版14.4.2-ee
我认为您可以利用触发器功能来创建执行 smoke-test
步骤的子管道,请参阅 here and there
基本上,下游管道将由您的 deploy
步骤触发并执行两个步骤(deploy
和 smoke-test
)
这不是您要找的东西,但是有一种方法可以避免两次维护规则。实际上有 3 种方式:)
- 使用扩展又名继承 - 您定义规则并从中扩展
.rules:
rules:
- if: ....
deploy:
extends:
- .rules
smoke-test:
extends:
- .rules
deploy:
rules:
- if: ....
smoke-test:
rules:
- !reference ['deploy', rules]
这 3 种方式可以让您轻松地重用规则,并且应该可以帮助您解决问题