如何在 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
在 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