>问题摘要:
我的目标是添加一个rules
子句,以配置 Gitlab CI 作业,以便在设置环境变量或执行手动操作时运行。不幸的是,该步骤目前使用了only
和except
子句,因此我还必须将它们转换为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_NAME
vs$CI_COMMIT_REF_SLUG
vs$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
是按顺序评估的。希望有帮助。