Gitlab CI条件语句无法按预期运行:AND和OR条件

时间:2019-09-18 12:50:34

标签: gitlab gitlab-ci

我想在Gitlab CI(Gitlab云)中从事以下工作。

  • 目标分支应为([^\/]+$)master
  • 该提交应具有与之关联的标记,其标记应为productionvx.x.x

首先,我认为以下语句应该起作用:

vx.x

但是事实证明,无论您如何安排only: - master - production only: - tags only: - /^v[0-9](?:\.[0-9]){2,3}/ ,它始终会将不同的语句视为only。因此,我提出了以下声明,以查看是否可以正确解决该问题:

OR

那也不起作用。然后,我认为我应该能够使用最近添加到Gitlab CI中的only: - tags - /^v[0-9](?:\.[0-9]){2,3}/ except: - /^(?!master)/ - /^(?!production)/

rules

但是,事实证明语法不正确,并且不允许使用括号。然后我得出以下声明:

rules:  
      - if: '($CI_MERGE_REQUEST_TARGET_BRANCH == "master" || $CI_MERGE_REQUEST_TARGET_BRANCH == "production") && $CI_COMMIT_TAG =~ /^v[0-9](?:\.[0-9]){2,3}/'
        when: always

但是上面的陈述也不起作用。如果有人可以帮助我了解如何在Gitlab CI中满足要求的条件,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

我在GitLab企业版12.3.0-pre版本的gilab.com项目上执行了一些测试。 Gitlab docs说:

  

仅使用键,各个键在逻辑上由AND连接起来

     

(任何参考)AND(任何变量)AND(任何变化)AND(如果   kubernetes处于活动状态)

所以我创建了如下的管道进行测试:

build0-refs:
  script:
    - env | sort
  only:
    refs:
      - master
      - production
build1-variables:
  script:
    - env | sort
  only:
    variables:
      - $CI_COMMIT_TAG =~ /^v[0-9](?:\.[0-9]){1,2}$/
build2-refs-and-variables:
  script:
    - env | sort
  only:
    refs:
      - master
      - production
    variables:
      - $CI_COMMIT_TAG =~ /^v[0-9](?:\.[0-9]){1,2}$/

我在带有和不带有标签的不同分支上尝试了不同的情况,并检查了触发了哪些构建。

对于带标记的提交,将触发2条管道。一个带有 CI_COMMIT_REF_NAME = master 且缺少 CI_COMMIT_TAG ,另一个带有 CI_BUILD_REF_NAME CI_COMMIT_TAG 且具有相同的标签值。

build2-refs-and-variables从未被触发。看起来ref名称和commit标记的条件相互排斥。您可能应该更改流程。

答案 1 :(得分:0)

我看到两个问题:

  1. 您的正则表达式与vx.x不匹配,我为此情况构建了一个新的I build a new one fitting this case

  2. 在您的if语句中,您尝试将标签与master或production匹配,但我认为标签不适合分支。因此,您必须验证标签,母版或产品

相关问题