在 Gitlab CI 中将"only/except"子句转换为"rules"子句



>问题摘要:

我的目标是添加一个rules子句,以配置 Gitlab CI 作业,以便在设置环境变量或执行手动操作时运行。不幸的是,该步骤目前使用了onlyexcept子句,因此我还必须将它们转换为rules语法,我还没有完全掌握。

当前作业定义:

deploy:
only:
- branches
except:
refs:
- /flux-.*$/  
- master
stage: deploy
when: manual

所需更改:

我将更换

when: manual

rules:
- if: '$CI_ENVIRONMENT_NAME'
- when: manual

现在我想学习如何翻译only/except子句。我认为它将完全基于预定义的环境变量测试,尽管我不确定哪些变量对此翻译感兴趣。

非常感谢您的任何建议或指示。

正如您指出的那样,使用预定义的环境变量是使用rules的方法。其中许多可用于实现相同的目标,这实际上取决于您的需求(例如:$CI_COMMIT_REF_NAMEvs$CI_COMMIT_REF_SLUGvs$CI_COMMIT_BRANCH(。

我的目标是添加一个规则子句,以配置 Gitlab CI 作业,以便在设置环境变量或执行手动操作时运行。

只是为了确保理解你的意思:

  • 如果$CI_ENVIRONMENT_NAME则始终运行部署作业,否则,如果分支master且与/flux-.*$/不匹配,则允许手动触发deploy作业。

这是对的吗?

如果是,一个实现如下所示。(如果需要,您还可以使用||运算符合并前 2 条规则(

deploy:
stage: deploy
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
when: never
- if: '$CI_COMMIT_REF_NAME =~ /flux-.*$/'
when: never
- if: '$CI_ENVIRONMENT_NAME'
- when: manual

请记住,rules是按顺序评估的。希望有帮助。

最新更新