如何配置GitLab CI作业仅在受保护的分支上运行?

14

我试图配置一个GitLab CI工作流,只在受限分支上运行,但我找不到only指令来实现此操作。

4个回答

28

应该使用rules:if

rules:
  - if: '$CI_COMMIT_REF_PROTECTED == "true"'

only:variables: 已经被弃用


1
单引号的目的是什么?在手册中,这些表达式是不带它们的。 - Alek

13

使用only:variables:结合CI_COMMIT_REF_PROTECTED似乎是解决您问题的好方法,但在没有实验的情况下很难确定细节。

预定义变量CI_COMMIT_REF_PROTECTED的文档有些不清楚。

If the job is running on a protected branch

我原本认为CI_COMMIT_REF_PROTECTED只有在分支受到保护时才会设置,但实际上它是一个布尔值。这意味着我们应该检查字符串"true"而不是变量的存在。请参见variables -> supported syntax,规则1。使用字符串进行等值匹配。

综合考虑,我认为一个明确表达你意图的完整解决方案将是:

only:
  refs:
    - branches
  variables:
    - $CI_COMMIT_REF_PROTECTED == "true"

如果您不希望作业在受保护的标签上运行,则需要refs:branches


感谢您的提示,我在官方文档MR 26491上建议了一个不同的警告,很快就会实现。 - naufraghi

8

我认为应该使用$CI_COMMIT_REF_PROTECTED而不是CI_COMMIT_REF_PROTECTED。来源:https://docs.gitlab.com/ee/ci/variables/README.html#supported-syntax - Fred Fettinger
即使有上面的建议,这仍然是不正确的。正确的解决方案与此有足够的不同,我将发布自己的答案。 - Fred Fettinger

2
你可以在你的项目(或组)中添加一个受保护的变量。 假设你已经设置了一个值任意的变量PROTECTED,你可以使用它。
翻译后的内容:

您可以向您的项目(或组)添加一个受保护的变量。假设您已经设置了一个任意值的变量PROTECTED,您可以使用它。

only:
    variables:
        - $PROTECTED

在你的 .gitlab-ci.yml 文件中,检查变量是否存在(因为受保护的变量只会传递给受保护的分支),将其命名为"最初的回答"。

这是一个可能的解决方案,但我正在寻找更多内置于GitLab中的内容。换句话说:“为什么我需要添加一个无用的变量来指定应仅在受保护的分支上运行的作业?”非常感谢您的提示。如果没有标准方法可以解决这个问题,我可以接受这个答案。 - Louis Caron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接