我有一个很大的.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不能扩展变量。
这里还有其他解决方法吗?我想念什么吗?
答案 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的形式。以下不支持:
此外,如果在不受保护的分支上工作,则应注意该变量未设置为protected。