4

不能$$在 GitLab CI 的环境变量中使用字符。

我将我的秘密存储在 GitLab CI 环境变量中,其中我的一个密码字符串末尾有 $$ 字符(例如:Ab1ab$$)。当我回显它或使用 envsubst 时,输出将是 Ab1ab$,最后去掉额外的 $。

我尝试使用将字符串包围在 '',"" 中,但都没有帮助。在 gitlab 社区上看到一些关于在 env 变量中使用 $ 字符的问题,但找不到任何解决我的确切问题的方法。

https://gitlab.com/gitlab-org/gitlab-ce/issues/27436

出口 VAR= 'Ab1ab$$' 回声 $VAR=Ab1ab$

4

1 回答 1

0

这是在 CI 中设置环境变量的一个很常见的问题!我在 CircleCI 上也遇到过很多次。通常,我在反斜杠方面取得了巨大的成功,但我猜你已经尝试过了。

我发现一个线程讨论了我认为可能是一个非常相关的问题: https ://gitlab.com/gitlab-org/gitlab-ce/issues/27436

关键的一点是,至少在 GitLab 产品的那个版本中,他们还没有找到一个很好的答案。我决定开始做一些实验:

https://gitlab.com/mattbornski/gitlab-ci-exploration

我设置了一大堆不同格式的环境变量,以查看导致美元符号的结果。

$ python3 audit_environment.py
DOLLA_DOUBLE_MIDSTRING = 1$234
DOLLA_QUAD_MIDSTRING = 1$$234
DOLLA_SINGLE_MIDSTRING_BACKSLASHED = 1\34
DOLLA_DOUBLE_MIDSTRING_BACKSLASHED = 1\\34
DOLLA_DOUBLE_MIDSTRING_LEADING_BACKSLASHED = 1\$234
DOLLA_QUAD_ENDSTRING = 1234$$
DOLLA_SINGLE_MIDSTRING_BACKSLASHED_DOUBLE_QUOTED = "1\34"
DOLLA_SINGLE_MIDSTRING_DOUBLE_QUOTED = "134"
DOLLA_SINGLE_MIDSTRING_BACKSLASHED_SINGLE_QUOTED = '1\34'
DOLLA_SINGLE_MIDSTRING = 134
Job succeeded

所以,这里的外卖:

  • 双美元符号导致单个美元符号出现在 GitLab CI 中的代码可访问的环境变量中。这可以重复。
  • 报价通过但不影响美元符号的扩展/省略
  • 反斜杠通过但不影响美元符号的扩展/省略

所以你的选择看起来像:

  • 在您设置的 var 中放置四个美元符号,以便在您运行的环境中获得两个
  • 重新生成您的密钥,使其中没有有问题的字符(这是一个非常真实的选择,我已经多次利用自己来避免这个兔子洞)

为了进一步探索,这里有一些更有趣的选择:https ://unix.stackexchange.com/a/309791

于 2019-04-26T14:57:29.383 回答