GCP Cloud 构建将机密传递给 docker arg

tol*_*oas 2 docker google-cloud-platform

我打算将我的 npm 令牌传递给 gcp cloud build,以便我可以在多阶段构建中使用它来安装私有 npm 包。

我有以下删节的 Dockerfile:

FROM ubuntu:14.04 AS build
ARG NPM_TOKEN

RUN echo "NPM_TOKEN:: ${NPM_TOKEN}"
Run Code Online (Sandbox Code Playgroud)

以及以下删节的 cloudbuild.yaml:

---
  steps:
  - name: gcr.io/cloud-builders/gcloud
    entrypoint: 'bash'
    args: [ '-c', 'gcloud secrets versions access latest --secret=my-npm-token > npm-token.txt' ]
  - name: gcr.io/cloud-builders/docker
    args:
    - build
    - "-t"
    - gcr.io/my-project/my-program
    - "."
    - "--build-arg NPM_TOKEN= < npm-token.txt"
    - "--no-cache"
Run Code Online (Sandbox Code Playgroud)

我的 cloudbuild.yaml 基于文档,但似乎我无法将两个和两个放在一起,因为表达式:“--build-arg NPM_TOKEN= < npm-token.txt”不起作用。我已经测试了 DockerFile,当我直接传入 npm 令牌时,它可以工作。我只是无法将 gcloud 秘密中的令牌作为构建参数传递给 docker。

非常感谢帮助!

Lau*_*oll 7

您的目标是将秘密文件内容放入构建参数中。因此,您必须使用 或 来读取文件NPM_TOKEN="$(cat npm-token.txt)"内容NPM_TOKEN="$(< npm-token.txt)"

  name: gcr.io/cloud-builders/docker
  entrypoint: 'bash'
  args: [ '-c', 'docker build -t gcr.io/my-project/my-program . --build-arg NPM_TOKEN="$(cat npm-token.txt)" --no-cache' ]
Run Code Online (Sandbox Code Playgroud)

注意:gcr.io/cloud-builders/docker 但是使用 exec 入口点形式。因此,您将入口点设置为 bash。

另请注意,您将密钥保存到构建工作区(/workspace/..)。这还允许您将机密作为文件复制到容器中。

FROM ubuntu:14.04 AS build
ARG NPM_TOKEN

COPY npm-token.txt .
RUN echo "NPM_TOKEN:: $(cat npm-token.txt)"
Run Code Online (Sandbox Code Playgroud)