Google Cloud Build 中的环境变量

Nur*_*nov 7 google-cloud-platform google-cloud-build

我们想从 Bitbucket Pipelines 迁移到 Google Cloud Build 来测试、构建和推送 Docker 镜像。

我们如何在没有 CryptoKey 的情况下使用环境变量?例如:

- printf "https://registry.npmjs.org/:_authToken=${NPM_TOKEN}\nregistry=https://registry.npmjs.org" > ~/.npmrc
Run Code Online (Sandbox Code Playgroud)

bsz*_*zom 6

args要在构建步骤部分使用环境变量,您需要:

  • “使用 $$ 解析环境变量的 shell”(如示例代码中所述
  • 并且您还需要小心引号的使用(使用单引号)

请参阅下面的中断以获取对这两点的更详细解释。

虽然David Bendory 也链接到的使用加密资源文档(您可能基于您的假设)显示了如何使用通过 指定的加密环境变量来执行此操作secretEnv,但这不是必需的,它也适用于正常环境变量。

在您的具体情况下,您需要修改构建步骤,如下所示:

# you didn't show us which builder you're using - this is just one example of
# how you can get a shell using one of the supported builder images

- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', 'printf "https://registry.npmjs.org/:_authToken=%s\nregistry=https://registry.npmjs.org" $$NPM_TOKEN > ~/.npmrc']
Run Code Online (Sandbox Code Playgroud)

%s请注意要格式化的字符串中的用法以及环境变量如何作为参数传递给printf。我不知道可以将环境变量值直接包含在格式字符串中。

或者,您可以echo按如下方式使用:

args: ['-c', 'echo "https://registry.npmjs.org/:_authToken=$${NPM_TOKEN}\nregistry=https://registry.npmjs.org" > ~/.npmrc']


详细解释:

我在顶部的第一点实际上可以分为两部分:

  1. 你需要一个 shell 来解析环境变量,并且
  2. 您需要转义该$字符,以便 Cloud Build 不会尝试在此处执行替换

如果你不这样做 2.你的构建将失败并出现如下错误:合并替换和验证构建时出错:验证构建时出错:模板中的键“NPM_TOKEN”不是有效的内置替换

您应该通读替换变量值文档并确保您了解其工作原理。然后你需要意识到你不是执行替换,至少不是 Cloud Build 替换。您要求 shell 执行替换。

在这种情况下, 2. 实际上是您从替换变量值文档中获得的唯一有用的信息($$计算结果为文字字符$)。

如果您习惯于经常使用 shell,那么我在顶部的第二点可能是显而易见的。需要使用单引号的原因 两个问题很好地解释了。基本上:“您需要使用单引号来防止调用 shell 中发生插值。”