如何在 cloudbuild.yaml 中使用 Kaniko?
Posted
技术标签:
【中文标题】如何在 cloudbuild.yaml 中使用 Kaniko?【英文标题】:How to use Kaniko in cloudbuild.yaml? 【发布时间】:2021-05-15 19:12:59 【问题描述】:我刚刚了解到可以通过使用 Kaniko 缓存来加快 Google Cloud 构建中的构建过程。我查看了文档,它提供了一个小例子。但是,我不确定如何在我的用例中应用它。我基本上是在将 Nuxt 应用程序推送到我的 Github 存储库中,并且每次推送时云都会构建它。文档示例说我们需要将cloud-builders/docker
替换为kaniko-project/executor:latest
。下面是我的cloudbuild.yaml
sn-p
steps:
# Create .npmrc file from Fontawesome secret
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', 'gcloud secrets versions access latest --secret=fontawesome > .npmrc' ]
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/PROJECTNAME/IMAGENAME:$COMMIT_SHA', '.']
# Push the image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/PROJECTNAME/IMAGENAME:$COMMIT_SHA']
Kaniko 文档说我需要以下内容:
steps:
- name: 'gcr.io/kaniko-project/executor:latest'
args:
- --destination=gcr.io/$PROJECT_ID/image
- --cache=true
- --cache-ttl=XXh
这是我尝试过的(但不确定是否应该是这样):
steps:
# Create .npmrc file from Fontawesome secret
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', 'gcloud secrets versions access latest --secret=fontawesome > .npmrc' ]
# Build the container image
- name: 'gcr.io/kaniko-project/executor:latest'
args: ['--destination=gcr.io/$PROJECT_ID/image', '--cache=true', '--cache-ttl=6h'
,'build', '-t', 'gcr.io/PROJECTNAME/IMAGENAME:$COMMIT_SHA', '.']
# Push the image to Container Registry
- name: 'gcr.io/kaniko-project/executor:latest'
args: ['--destination=gcr.io/$PROJECT_ID/image', '--cache=true', '--cache-ttl=6h'
, 'push', 'gcr.io/PROJECTNAME/IMAGENAME:$COMMIT_SHA']
【问题讨论】:
您的 cloudbuild.yaml 文件似乎与 docs 上的建议相同。您还面临其他困难吗?您是否注意到构建步骤的增加?我建议首先使用gcloud config set builds/use_kaniko True
启用 Kaniko 缓存属性,并检查运行gcloud builds submit --tag [IMAGE]
时速度是否有所提高。
@DanielOcando Kaniko 构建失败,我收到以下错误:unknown command "build" for "executor"
【参考方案1】:
Kaniko 没有推送和构建命令。当您在 cloudbuild.yaml 中将其指定为构建步骤时,它会隐式执行此操作(构建和推送)。
一个例子是:
steps:
# Build the container image and push it with Kaniko
- name: 'gcr.io/kaniko-project/executor:latest'
args:
[
"--dockerfile=<DOCKER-FILE-DIST>",
"--context=dir://<BUILD_CONTEXT>",
"--cache=true",
"--cache-ttl=6h",
"--destination=gcr.io/$PROJECT_ID/hello:$COMMIT_SHA"
]
# Deploy image to Cloud Run
- name: "gcr.io/cloud-builders/gcloud"
args:
- "run"
- "deploy"
- "hello"
- "--image"
- "gcr.io/$PROJECT_ID/hello:$COMMIT_SHA"
- "--region"
- "us-central1"
- "--platform"
- "managed"
【讨论】:
这很有帮助,谢谢!我只是想问这里的--context
到底是什么?我试了一下并将路径设置为gcr.io/$PROJECT_ID/hello:$COMMIT_SHA
,但它给了我以下错误:building image: error building stage: failed to optimize instructions: failed to get files used from context: failed to resolve sources
。删除--context
后,它有点工作,但我不确定加速。如果您还可以向我指出一些资源来学习这些东西,我将不胜感激?谢谢
上下文是构建镜像需要的Dockerfile所在的路径。您没有使用任何supported storage options,这可能就是您收到该错误消息的原因。以上是关于如何在 cloudbuild.yaml 中使用 Kaniko?的主要内容,如果未能解决你的问题,请参考以下文章
在 GCP cloudbuild.yaml 中指定与“名称”不同的“执行函数”
如何通过 gcloud cli args 或环境变量将 secretEnv 指定给 cloudbuild.yaml
Google Cloud Build 不会替换 cloudbuild.yaml 的机密部分中的值
有啥方法可以从 docker hub 提取图像并使用 cloudbuild.yaml 部署到云运行