【发布时间】:2022-01-19 05:47:57
【问题描述】:
我有一个具有以下规则的管道作业:
Deploy:
rules:
- if: $CI_COMMIT_AUTHOR != "project <project25636_bot@example.com>" && $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"
changes:
- 'root/**/*'
如您所见,如果提交作者 NOT "project project25636_bot@example.com" 并且文件夹根目录已更改,则此作业仅在成功提交时运行.
只是一些小的背景知识:当普通用户将一些文件添加到根文件夹时,管道应该执行。但是,还有一个机器人用户也将文件保存到此文件夹(通过另一个作业),当此机器人“提交”时,我不希望它执行此作业,因此 !=。上述规则完美运行。
我正在尝试删除机器人电子邮件地址的硬编码并使用变量来构建它。原始代码更复杂,但为了演示和隔离问题所在,我将其简化如下:
如果我将上述工作改为:
variables:
bot: "project <project25636_bot@example.com>"
Deploy:
rules:
- if: $CI_COMMIT_AUTHOR != "$bot" && $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"
changes:
- 'root/**/*'
它不起作用 - 即使对于机器人用户,它也总是执行。我什至尝试了变量的许多变体,例如${bot},但它从来没有工作过,就好像 GitLab 无法将变量相互比较。
在有人问我为什么要这样做之前 - 正如我所说,我已经简化了上述内容以证明问题所在,我的真实代码会动态构建变量。当我无法让它工作时,我开始进一步简化代码,直到我到达现在的位置。
我尝试过的:
将规则更改为(以容纳字符串中的空格):
$CI_COMMIT_AUTHOR != $bot
$CI_COMMIT_AUTHOR != ${bot}
$CI_COMMIT_AUTHOR != "${bot}"
谁能解释我哪里出错了?或者这似乎是 GitLab 的问题?
谢谢,
【问题讨论】: