如何在 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.yamlsn-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 部署到云运行

cloudbuild.yaml 中构建步骤中的 gcloud beta 命令。我应该使用入口点还是参数?

无法使用 cloudbuild.yaml 配置机密以部署到 cloudrun 以实现对话流 basicauth