如何使 IF 语句在 gitlab-ci 作业中添加为 AND 运算符?

How to make IF statements add up as an AND operator in gitlab-ci job?

我有一个工作模板 .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 版本 13.9 开始,这是不可能的。他们最接近于在模板中使用 rules 关键字是允许条件来决定是否实际包含一个包含或不使用 rules (https://gitlab.com/gitlab-org/gitlab/-/issues/216673).

如果您是付费客户,与支持人员(或您的销售联系人?不确定)交谈会有所帮助。一般来说,Gitlab 依靠社区来构建所需的功能,因为它是开源的,但是当足够多的付费客户想要一个功能时,他们会直接使用它。