如何在 Google Cloud Build 中为 Kaniko 使用非执行入口点(以启用构建参数定义)

How can I use a non-exec entrypoint for Kaniko in Google Cloud Build (to enable build arg definition)

在 GCB 中使用 Kaniko 的 instructions 使用 kaniko 项目构建器的 exec 形式,如下所示:

  - id: 'Build (with Kaniko Cache)'
    name: 'gcr.io/kaniko-project/executor:latest'
    args:
      - --destination=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA
      - --cache=true
      - --cache-ttl=6h

但我用它来替换 docker 构建,在其中我绕过 exec 的使用形式以注入构建 arg(来自 Secret Manager 的访问令牌)如所述 here and .

  - id: 'Build'
    name: gcr.io/cloud-builders/docker
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        docker build --cache-from $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA --build-arg PERSONAL_ACCESS_TOKEN_GITHUB=$(cat decrypted-pat.txt) -t $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA .

我试过定义一个 bash 入口点,但没有找到,所以我被卡住了。甚至可以 运行 非执行形式吗?

注意:可以访问容器内文件中的秘密,而不是通过构建参数,但这意味着更改我的开发人员的设置,以便所有人都按顺序拥有该秘密文件在本地构建他们的开发映像,我可以但真的不想这样做。

Kaniko 执行器映像提供了 --build-arg 标志以在构建时传入 ARG 值,类似于 Docker。您会找到附加标志的完整列表 here

鉴于此,您将能够 运行 您的构建方式如下:

steps:
- name: gcr.io/cloud-builders/gcloud
  entrypoint: 'bash'
  args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-pat.txt" ]
- name: 'gcr.io/kaniko-project/executor:latest'
  args:
  - --destination=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA
  - --cache=true
  - --cache-ttl=6h
  - --build-arg=PERSONAL_ACCESS_TOKEN_GITHUB=$(cat decrypted-pat.txt)

我用docker run解决了它:

- id: Build
  name: gcr.io/cloud-builders/docker
  entrypoint: /bin/bash
  args:
  - -c
  - |
   docker run \
      --network=cloudbuild \
      -v /workspace:/workspace \
        gcr.io/kaniko-project/executor:latest \
          --dockerfile /workspace/Dockerfile \
          --build-arg=GITHUBTOKEN=$$GITHUBTOKEN \
          --destination=gcr.io/$PROJECT_ID/myapp:$SHORT_SHA \
          --cache=true \
          --context dir:///workspace/
  secretEnv: ['GITHUBTOKEN']

availableSecrets:
  secretManager:
    - versionName: projects/$PROJECT_ID/secrets/github_machine_user_pat/versions/latest
      env: GITHUBTOKEN