Google Cloud Build + Google Secret Manager 替换问题
Google Cloud Build + Google Secret Manager Substitution Problems
我们有一个需要 go get
私人仓库的仓库。为此,我们使用 SSH 密钥访问私有 repo/module.
我们正在使用 Google Secret Manager 存储此 SSH 密钥,并使用 build-arg
标志将其传递给 Docker。现在,当我们在本地执行此操作时,Docker 文件会按预期构建和 运行s。这是我们用于本地构建的命令:
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 .
使用 Cloud Build,当您想要获取本地 linux 变量而不是替代变量时,您必须将 $ 与另一个 $ 进行空格。看看这个:
# 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 .
SSH_PRIVATE_KEY
前面加上$$表示:不看代入变量,看linux变量
我还删除了导出行末尾的 &&。管道 |表示:运行每个命令连续,第return行限制每个命令
感谢大家的帮助!这个很奇怪。事实证明,这不是 Cloud Build 或 Secret Manager 的问题,而是我使用的 Dockerfile 的问题。
我没有使用下面 Dockerfile 中的命令设置 GOPRIVATE
,而是使用了像 RUN export GOPRIVATE="bitbucket.org/odds"
.
这样的语句
如果有人再次遇到类似的情况,这里是完整的 Dockerfile。
FROM golang:1.15.1
WORKDIR $GOPATH/src/bitbucket.org/gml/my-srv
ENTRYPOINT ["./my-srv"]
ARG CREDENTIALS
RUN git config \
--system \
url."https://${CREDENTIALS}@bitbucket.org/".insteadOf \
"https://bitbucket.org/"
RUN go env -w GOPRIVATE="bitbucket.org/my-team"
COPY . .
RUN make build
我们有一个需要 go get
私人仓库的仓库。为此,我们使用 SSH 密钥访问私有 repo/module.
我们正在使用 Google Secret Manager 存储此 SSH 密钥,并使用 build-arg
标志将其传递给 Docker。现在,当我们在本地执行此操作时,Docker 文件会按预期构建和 运行s。这是我们用于本地构建的命令:
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 .
使用 Cloud Build,当您想要获取本地 linux 变量而不是替代变量时,您必须将 $ 与另一个 $ 进行空格。看看这个:
# 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 .
SSH_PRIVATE_KEY
前面加上$$表示:不看代入变量,看linux变量
我还删除了导出行末尾的 &&。管道 |表示:运行每个命令连续,第return行限制每个命令
感谢大家的帮助!这个很奇怪。事实证明,这不是 Cloud Build 或 Secret Manager 的问题,而是我使用的 Dockerfile 的问题。
我没有使用下面 Dockerfile 中的命令设置 GOPRIVATE
,而是使用了像 RUN export GOPRIVATE="bitbucket.org/odds"
.
如果有人再次遇到类似的情况,这里是完整的 Dockerfile。
FROM golang:1.15.1
WORKDIR $GOPATH/src/bitbucket.org/gml/my-srv
ENTRYPOINT ["./my-srv"]
ARG CREDENTIALS
RUN git config \
--system \
url."https://${CREDENTIALS}@bitbucket.org/".insteadOf \
"https://bitbucket.org/"
RUN go env -w GOPRIVATE="bitbucket.org/my-team"
COPY . .
RUN make build