Gitlab CI 只有来自 extends 的变量
Gitlab CI only variables that come from extends
我有以下设置(简化版),当我使用包含字符串“TEST”的标签时,运行 没有达到预期的 merge::my。我不明白为什么会这样——我知道 only 不支持变量扩展,但这里的变量只是一个字符串,它是在不同的扩展中设置的——这是个问题吗?使用 yaml 锚会更好吗?有不同的建议吗?
我在merge_builds中检查only:variable的原因是因为我有很多语言,在这种情况下我使用了en,但我有很多其他语言,我不想这样做每个 only:variables(真正的匹配更复杂 - 我将它剥离到最低限度)
.merge_builds:
script:
- echo 'test'
only:
variables:
- $CI_COMMIT_TAG =~ $VARIABLEMATCH
.en_variables:
variables:
VARIABLEMATCH: /^$|(?i)EN/
merge::en:
extends:
- .en_variables
- .merge_builds
基于 GitLab 问题 35438,我认为目前无法使用变量(而不是文字)作为正则表达式模式。
在问题 35438 中,@furkanayhan 在 2021 年 9 月 6 日标题为“简介”的评论中解释说(抱歉,我无法获得它的永久链接)GitLab 将在值和作为变量给出的模式:
variables:
teststring: 'abcde'
pattern: '/^ab.*/'
test1:
script: exit 0
rules:
- if: '$teststring =~ $pattern'
test2:
script: exit 0
rules:
- if: '$teststring =~ /^ab.*/'
The test1 job is not created because the backend makes string comparison between "abcde" and "/'^ab.*/".
The test2 job is created because the backend makes regexp comparison between "abcde" and /'^ab.*/.
我相信您遇到了导致“test1 作业”无法创建的相同行为。
但是,问题 35438 表明 GitLab 计划在 2022 年 5 月 22 日的 15.0 版中提供修复。
您可能想要检查的另一件事是正则表达式本身。 GitLab 的正则表达式文档(here) states that GitLab uses the re2 regular expression syntax 用于此类比较。为了实现不区分大小写,我相信有人会附加“i”标志,如:
/pattern/i
我有以下设置(简化版),当我使用包含字符串“TEST”的标签时,运行 没有达到预期的 merge::my。我不明白为什么会这样——我知道 only 不支持变量扩展,但这里的变量只是一个字符串,它是在不同的扩展中设置的——这是个问题吗?使用 yaml 锚会更好吗?有不同的建议吗?
我在merge_builds中检查only:variable的原因是因为我有很多语言,在这种情况下我使用了en,但我有很多其他语言,我不想这样做每个 only:variables(真正的匹配更复杂 - 我将它剥离到最低限度)
.merge_builds:
script:
- echo 'test'
only:
variables:
- $CI_COMMIT_TAG =~ $VARIABLEMATCH
.en_variables:
variables:
VARIABLEMATCH: /^$|(?i)EN/
merge::en:
extends:
- .en_variables
- .merge_builds
基于 GitLab 问题 35438,我认为目前无法使用变量(而不是文字)作为正则表达式模式。
在问题 35438 中,@furkanayhan 在 2021 年 9 月 6 日标题为“简介”的评论中解释说(抱歉,我无法获得它的永久链接)GitLab 将在值和作为变量给出的模式:
variables:
teststring: 'abcde'
pattern: '/^ab.*/'
test1:
script: exit 0
rules:
- if: '$teststring =~ $pattern'
test2:
script: exit 0
rules:
- if: '$teststring =~ /^ab.*/'
The test1 job is not created because the backend makes string comparison between "abcde" and "/'^ab.*/".
The test2 job is created because the backend makes regexp comparison between "abcde" and /'^ab.*/.
我相信您遇到了导致“test1 作业”无法创建的相同行为。
但是,问题 35438 表明 GitLab 计划在 2022 年 5 月 22 日的 15.0 版中提供修复。
您可能想要检查的另一件事是正则表达式本身。 GitLab 的正则表达式文档(here) states that GitLab uses the re2 regular expression syntax 用于此类比较。为了实现不区分大小写,我相信有人会附加“i”标志,如:
/pattern/i