我们想从位桶管道迁移到Google云构建,以测试,构建和推送Docker映像。
我们如何在没有CryptoKey的情况下使用环境变量。示例:
- printf "https://registry.npmjs.org/:_authToken=${NPM_TOKEN}\nregistry=https://registry.npmjs.org" > ~/.npmrc
答案 0 :(得分:0)
听起来您想使用加密的机密:https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials
答案 1 :(得分:0)
要在构建步骤的args
部分中使用环境变量,您需要:
有关这两点的详细说明,请参见下面的中断。
虽然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']
详细说明:
我在顶部的第一点实际上可以分为两部分:
$
字符,以便Cloud Build不在此处尝试执行替换操作如果您不这样做2.您的构建将失败,并显示以下错误:合并替换并验证构建的错误:验证构建:验证错误:模板“ NPM_TOKEN”中的键不是有效的内置替代< / em>
您应该通读Substituting variable values文档,并确保您了解其工作原理。然后,您需要认识到您不是在这里进行替代,至少不是Cloud Build替代。您正在要求外壳执行替换。
在这种情况下,实际上2.是您从Substituting variable values文档中获得的唯一有用的信息($$
的结果为文字字符$
)。 / p>
如果您经常使用Shell,那么我在顶端的第二点可能很明显。 these two个问题很好地解释了需要使用单引号的原因。基本上:“您需要使用单引号来防止在调用shell中发生插值。”