我们使用 Sinopia 作为我们的 npm 存储库,凭据(主页中的 .npmrc 文件或当前目录(是构建所必需的......当然,直到今天,我一直避免在代码中保留这些可信度,并且通过传递使用 .npmrc 凭据文件的内容设置的 env var 来将它们排除在 docker 映像层之外。然后在构建过程中:
RUN cat $NPMRC>.npmrc && npm install ; rm .npmrc
。所有在一个运行避免了带有秘密的层.....
但是我正在尝试使用 YAML 文件设置容器构建请求来设置 env. var,但失败了。build-request.yaml 必须在代码中,所以我不能把它放在那里,我试图添加--build-arg NPMRC="$(<.npmrc)"
......从存储桶复制后....没有错误,但身份验证失败
我正在尝试使用这样的咒语创建构建参数:
[..., '--build-arg', 'NPMRC=""$(< ./.npmrc)""', ....]
这在构建历史记录中显示为
... build --build-arg "NPMRC=""$(cat ./.npmrc)""" -t
。如果 bash 像我认为的那样抓住子壳,哪个 afaict 是正确的:
echo "NPMRC=""$(cat ./.npmrc)"""
-> NPMRC="_auth=...."
寻找其他人可能已经找到的解决方案
我认为这个页面是正确的,所以我会说参考它回答我自己的问题是安全的(我猜我不会接受?
https://cloud.google.com/container-builder/docs/tutorials/using-encrypted-files
摘要:使用云密钥管理服务加密 .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]