GitLab 管道在评估 $CI_COMMIT_TAG 时卡住了

问题描述 投票:0回答:1

我使用以下简单的管道(

.gitlab-ci.yml
):

workflow:
  rules:
    - if: $CI_COMMIT_TAG =~ /^v?(\d+(\.\d+)*)$/

build:
  tags:
    - my-tag
  script:
    - echo "Hello"

我希望它在提交获得像

v1.0
这样的标签时立即执行。我的项目可以接触到活跃的团体跑步者。跑步者受到保护。跑步者带有
my-tag
标记。当我用
v1.0
标记受保护分支上的提交时,管道启动,但作业立即卡住并出现以下错误:

由于以下问题之一,该作业陷入困境。在线没有活跃的跑步者,没有受保护分支的跑步者,或者没有与所有作业标签匹配的跑步者:my-tag

转到项目 CI 设置

如果我将管道更改为:

workflow:
  rules:
    - if: '"1" == "1"'

build:
  tags:
    - my-tag
  script:
    - echo "Hello"

它在每次提交时都成功运行。这就是为什么我认为它与错误消息所建议的运行器配置无关。

当我在规则中使用

$CI_COMMIT_TAG
时,有什么问题?

我使用的是 GitLab 16.9.1 和 GitLab Runner 16.9.1。

git gitlab gitlab-ci pipeline gitlab-ci-runner
1个回答
0
投票

评估

$CI_COMMIT_TAG
时,管道变为 tag 管道,而不是 branch 管道。标签不知道它“所属”的分支。因此,启动的管道不属于受保护的上下文,并且不能在受保护的运行器上执行。

要解决这个问题,您也可以保护您的标签(来源):

配置受保护标签

先决条件:

  • 您必须至少具有该项目的维护者角色。
  1. 在左侧边栏上,选择搜索或转到并找到您的项目。
  2. 选择设置 > 存储库
  3. 展开受保护的标签
  4. 选择添加新
  5. 要保护单个标签,请选择标签,然后从下拉列表中选择您的标签。
  6. 要保护名称与字符串匹配的所有标签:
    1. 选择标签
    2. 输入用于标签匹配的字符串。支持通配符 (*)。
    3. 选择创建通配符
  7. 允许创建中,选择可以创建受保护标签的角色。
  8. 选择保护

受保护的标签(或通配符)显示在受保护的标签列表中。

© www.soinside.com 2019 - 2024. All rights reserved.