Gitlab-CI是否在only:refs中支持变量扩展?

时间:2018-12-19 05:49:58

标签: gitlab-ci

我有一个很大的.gitlab-ci.yml文件,其中包含许多工作。这些作业中有许多被过滤为仅在某些分支上运行。在管理此文件时,将这些分支的名称定义为文件顶部的变量会很方便,因此,如果分支名称更改,则仅需要更新变量。对于大多数编程语言来说,这是常量的相当标准的做法。

不幸的是,它在Gitlab-CI中看起来不起作用:

variables:
  THIS_DOES_NOT_WORK: "this_works"

lots:
  only:
    refs:
      - this_works
  script:
    - echo "lots"

of:
  only:
    refs:
      - $THIS_DOES_NOT_WORK
  script:
    - echo "of"

jobs:
  only:
    refs:
      - $THIS_DOES_NOT_WORK
  script:
    - echo "jobs"

在上面的示例中,由于THIS_DOES_NOT_WORK变量未在“ of”和“ jobs”作业中展开,因此仅将运行“ lots”作业。

closest documentation which I can find没有提及only:refs关键字。它确实在only:variables关键字中有详细介绍。如果我们可以执行以下操作,则此关键字可以提供一种不错的解决方法:

variables:
  THIS_DOES_NOT_WORK: "this_works"

lots:
  only:
    variables:
      - $CI_COMMIT_REF_NAME == "this_works"
  script:
    - echo "lots"

of:
  only:
    variables:
      - $CI_COMMIT_REF_NAME == $THIS_DOES_NOT_WORK
  script:
    - echo "of"

jobs:
  only:
    variables:
      - $CI_COMMIT_REF_NAME == $THIS_DOES_NOT_WORK
  script:
    - echo "jobs"

在这种情况下,文档中明确指出这将不起作用。  具有讽刺意味的是,用于过滤变量比较的关键字:variables不能扩展变量。

这里还有其他解决方法吗?我想念什么吗?

1 个答案:

答案 0 :(得分:1)

根据https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html,看来ci管道的功能现在已经增强,并且实际上可以扩展变量。对我来说,解决方案是使用部分示例:

jobs:
  only:
    variables:
      - $THIS_DOES_WORK == $CI_COMMIT_REF_NAME
  script:
    - echo "jobs"

在我的情况下,$ THIS_DOES_WORK是从gitlab ui通过CI / CD变量选项卡传递的变量。 Gitlab指出此范围内使用的约束变量具有:

变量必须采用$ variable的形式。以下不支持:

  • 基于环境名称(CI_ENVIRONMENT_NAME,CI_ENVIRONMENT_SLUG)的变量。
  • 与环境有关的任何其他变量(当前仅CI_ENVIRONMENT_URL)。
  • Persisted variables

此外,如果在不受保护的分支上工作,则应注意该变量未设置为protected。