4

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

  - 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 build,在其中我绕过了exec使用形式,以便注入构建 arg(来自 Secret Manager 的访问令牌),如此此处所述。

  - 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入口点,但没有找到,所以我被卡住了。甚至可以运行非执行表单吗?

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

4

2 回答 2

1

我使用以下方法解决了它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
于 2021-09-19T10:35:18.740 回答
1

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

鉴于此,您将能够像这样运行您的构建:

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)
于 2021-01-03T16:22:28.637 回答