我想在Gitlab CI(Gitlab云)中从事以下工作。
([^\/]+$)
或master
production
或vx.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中满足要求的条件,我将不胜感激。
答案 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)
我看到两个问题:
您的正则表达式与vx.x不匹配,我为此情况构建了一个新的I build a new one fitting this case
在您的if语句中,您尝试将标签与master或production匹配,但我认为标签不适合分支。因此,您必须验证标签,母版或产品