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