0

我们有一个需要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 .
4

2 回答 2

0

使用 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 变量。

我还删除了导出行末尾的 &&。管道 | 意思是:连续运行每条命令,回行限制每条命令

于 2020-09-10T08:06:00.620 回答
0

感谢所有的帮助!这个很奇怪。事实证明这不是 Cloud Build 或 Secret Manager 的问题,而是我使用的 Dockerfile。

GOPRIVATE我没有使用下面 Dockerfile 中的命令进行设置,而是使用了类似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
于 2020-09-10T21:37:55.583 回答