无法在 GitLab 环境变量中使用 `$$` 字符

mad*_*die 6 environment-variables gitlab gitlab-ci envsubst

$$无法在 GitLab CI 的环境变量中使用字符。

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

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

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

导出 VAR= 'Ab1ab$$' 回显 $VAR=Ab1ab$

mat*_*ski 1

这是在 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
Run Code Online (Sandbox Code Playgroud)

所以,这里的要点是:

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

所以你的选择看起来像:

  • 在您设置的 var 中放入四个美元符号,以便在运行的环境中获得两个美元符号
  • 重新生成你的密钥,这样它们就不会有有问题的字符(这是一个非常现实的选择,我确实多次利用过它来避免这个兔子洞)

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