我们有一个需要go get
私有存储库的存储库。为此,我们使用 SSH 密钥来访问私有仓库/模块。
我们使用Google Secret Managerbuild-arg
存储此 SSH 密钥,并使用标志将其传递给 Docker 。现在,当我们在本地执行此操作时,Dockerfile 会按预期构建和运行。这是我们用于本地构建的命令:
export SSH_PRIVATE_KEY="$(gcloud secrets versions access latest --secret=secret-data)" && \
docker build --build-arg SSH_PRIVATE_KEY -t my-image .
但是,当我们尝试将此设置移动到 Google Cloud Build 时,我们遇到了来自 Bitbucket 的 403 禁止错误,这让我相信 SSH 密钥要么没有被读取,要么没有被正确格式化。
完整的 403 错误是:
https://api.bitbucket.org/2.0/repositories/my-repo?fields=scm: 403 Forbidden
Step #0 - "Build": server response: Access denied. You must have write or admin access.
更奇怪的是,当我运行 Cloud Build 本地模拟器时,使用以下命令可以正常工作:cloud-build-local --config=builder/cloudbuild-prod.yaml --dryrun=false .
我尝试了许多不同的格式和方法,所以出于绝望,我向社区寻求帮助。可能是什么问题呢?
这是我们的 cloudbuild.yaml:
steps:
# Get secret
- id: 'Get Secret'
name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args:
- '-c'
- |
gcloud secrets versions access latest --secret=secret-data > /workspace/SSH_PRIVATE_KEY.txt
# Build
- id: 'Build'
name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- '-c'
- |
export SSH_PRIVATE_KEY=$(cat /workspace/SSH_PRIVATE_KEY.txt) &&
docker build --build-arg SSH_PRIVATE_KEY -t my-image .