【问题标题】:GitLab Variable not evaluating for pipeline jobGitLab 变量未评估管道作业
【发布时间】: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 的问题?

谢谢,

【问题讨论】:

    标签: bash gitlab gitlab-ci


    【解决方案1】:

    事实证明这是不可能的,因为 Gitlab 是个笑话。不支持将变量嵌套在另一个变量中。它在他们的积压中......https://gitlab.com/groups/gitlab-org/-/epics/3589

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 2021-12-08
      • 2022-08-11
      • 2023-01-02
      • 2021-03-27
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多