我们使用 Sinopia对于我们的 npm repo 和凭据(主页或当前目录中的 .npmrc 文件。)是 nec。用于构建.... 直到今天,我一直避免在代码中保留这些凭据,当然,还通过传递使用 .npmrc 凭据文件的内容设置的 env var 将它们排除在 docker 镜像层之外.然后在构建过程中:
RUN cat $NPMRC>.npmrc && npm install ; rm .npmrc
...一次 RUN 避免了一层持久存在的 secret .....
但是我正在尝试使用 YAML 文件设置容器构建请求来设置 env。 var 但失败了。 build-request.yaml 必须在代码中,所以我不能把它放在那里,我试图添加 --build-arg NPMRC="$(<.npmrc)"
...从桶中复制后....没有错误但身份验证失败
我正在尝试使用这样的咒语创建构建参数:
[..., '--build-arg', 'NPMRC=\""$(< ./.npmrc)"\"', ....]
这在构建历史中显示为
... build --build-arg "NPMRC=\""$(cat ./.npmrc)"\"" -t
...如果 bash 像我认为的那样获得子shell,那么这是正确的:
echo "NPMRC=\""$(cat ./.npmrc)"\""
-> NPMRC="_auth=...."
寻找其他人可能已经找到的解决方案
最佳答案
我认为这个页面是正确的,所以我会说引用它来回答我自己的问题是安全的(我不会接受,我猜?):
https://cloud.google.com/container-builder/docs/tutorials/using-encrypted-files
摘要:
使用 Cloud Key Management Service 加密 .npmrc 并提交 src 主目录中的加密文件(或复制到存储桶并添加 gsutil 构建步骤)。然后添加解密作为构建步骤:
steps:
- name: gcr.io/cloud-builders/gcloud
args:
- kms
- decrypt
- --ciphertext-file=npmrc.enc
- --plaintext-file=.npmrc
- --location=global
- --keyring=[KEYRING-NAME]
- --key=[KEY-NAME]
关于google-cloud-platform - 在 Google Container Builder 请求 YAML 中为 docker build 设置带有 secret 的 env var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179454/