【发布时间】:2021-06-07 06:23:03
【问题描述】:
我很想在 gitlab-ci.yml 文件中为部署阶段设置规则,如果 git 提交消息具有这种格式的特定 [STRING],那么它应该部署到编写此规则的特定环境。
# Deploy to QAT environment
deploy-qat:
stage: deploy
extends: .helm_deploy
environment:
name: qat
tags:
- exe-prd
rules:
- if: $CI_COMMIT_MESSAGE =~ "/[QAT]$/|/[qat]$/" #&& $CI_COMMIT_REF_NAME == "example/qat"
when: always
我已经写了上面的规则但是它不起作用。我尝试了以下正则表达式的组合,但是它们都不起作用。
"/\[QAT\]/|/\[qat\]/"
"/[QAT]/|/[qat]/"
"*\[QAT\]*|*\[qat\]*"
"\[\(QAT\|qat\)\]"
"\[\(QAT\|qat\)]"
"/\[(qat|QAT)\]/"
我尝试了以下网站的正则表达式here,它验证了我的要求,但它在 gitlab-ci.yml 文件中不起作用。
【问题讨论】:
-
尝试
"^(QAT|qat)$"(POSIX ERE) 或"^\(QAT\|qat\)$"(POSIX BRE)。如果字符串包含[和]字符,请尝试"^\[(QAT|qat)]$"或"^\[\(QAT\|qat\)]$"。 -
它没有用。典型的提交消息如下所示。 “测试 [QAT] 环境的提交消息规则。”
-
啊,然后删除
^和$。这些锚点需要完整的字符串匹配。 -
"\[\(QAT\|qat\)]"和"\[\(QAT\|qat\)\]"不起作用。 -
我认为
if: $CI_COMMIT_MESSAGE =~ /\[(QAT|qat)]/必须有效。这是一个有效的 POSIX ERE 表达式。刚刚看了rules:variablesdocs。