【发布时间】:2021-03-26 00:18:39
【问题描述】:
我有一个工作模板 .deploy_to_staging:template,其中包含一些规则,该规则由另一个工作 deploy_to_staging_triggered 扩展,该工作增加了另一个规则:
.deploy_to_staging:template:
<<: *job_deploy_definition
stage: deploy
rules:
- if: '$JOB_TRIGGERED == "DEFAULT"'
deploy_to_staging:triggered:
extends: .deploy_to_staging:template
rules:
- if: '$ENV_TRIGGERED == "STAGING"'
执行此操作时,Gitlab 似乎执行了一次合并,该合并在内部创建了一个看起来像这样的作业:
deploy_to_staging:mergedJob (following merge)
<<: *job_deploy_definition
stage: deploy
rules:
- if: '$CI_COMMIT_TAG && $JOB_TRIGGERED == "DEFAULT"'
- if: '$ENV_TRIGGERED == "STAGING"'
Gitlab 根据其文档按顺序评估规则直到第一次匹配。所以上面的 if 规则就像 OR 运算符,在逻辑上等同于这条 IF 语句:
- if : '$JOB_TRIGGERED == "DEFAULT" || $ENV_TRIGGERED == "STAGING"'
但是,我希望验证所有条件以执行作业,即使用 AND 运算符:
- if : '$JOB_TRIGGERED == "DEFAULT" && $ENV_TRIGGERED == "STAGING"'
如何做到这一点?
【问题讨论】:
标签: gitlab gitlab-ci gitlab-ce