Gogole Cloud构建中的环境变量

时间:2018-07-29 06:34:36

标签: google-cloud-build

我们想从位桶管道迁移到Google云构建,以测试,构建和推送Docker映像。

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

- printf "https://registry.npmjs.org/:_authToken=${NPM_TOKEN}\nregistry=https://registry.npmjs.org" > ~/.npmrc

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

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

有关这两点的详细说明,请参见下面的中断。

虽然David Bendory也链接到的Using encrypted resources文档(并且您可能基于该文档)显示了如何使用通过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']

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

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

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


详细说明:

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

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

如果您不这样做2.您的构建将失败,并显示以下错误:合并替换并验证构建的错误:验证构建:验证错误:模板“ NPM_TOKEN”中的键不是有效的内置替代< / em>

您应该通读Substituting variable values文档,并确保您了解其工作原理。然后,您需要认识到您不是在这里进行替代,至少不是Cloud Build替代。您正在要求外壳执行替换。

在这种情况下,实际上2.是您从Substituting variable values文档中获得的唯一有用的信息($$的结果为文字字符$)。 / p>

如果您经常使用Shell,那么我在顶端的第二点可能很明显。 these two个问题很好地解释了需要使用单引号的原因。基本上:“您需要使用单引号来防止在调用shell中发生插值。”