创建基本的构建配置文件

本页面介绍如何创建可用于在 Cloud Build 上启动构建的构建配置文件。

构建配置文件定义 Cloud Build 执行任务所需的字段。如果您使用 gcloud 命令行工具构建触发器启动构建,则需要构建配置文件。您可以使用 YAML 或 JSON 语法编写构建配置文件。

准备工作

创建构建配置

以下步骤说明如何创建简单的构建配置文件。配置文件中的每个字段定义一部分您要执行的任务。构建配置文件中唯一的必填字段是步骤的 name 字段;所有其他字段均为可选字段。

YAML

  1. 创建构建配置文件。在项目根目录中,创建名为 cloudbuild.yaml 的文件。这是您的 Cloud Build 构建配置文件。

  2. 添加步骤字段。构建配置文件中的 steps 部分包含您希望 Cloud Build 执行的构建步骤。

    steps:
    
  3. 添加第一个步骤。在 steps: 下,添加 name 字段并将其指向容器映像以执行您的任务。Cloud Build 及其开发者社区提供多个安装有常用工具和语言的容器映像。您可以在构建步骤中使用任何此类映像(又称为 Cloud Builder)或任何公开提供的映像。如需了解可在构建步骤中使用的不同类型的容器映像,请参阅 Cloud Build 构建器

    以下代码段显示的是带有 docker 构建器 gcr.io/cloud-builders/docker 的构建步骤,该构建器是运行 Docker 的容器映像。

    steps:
    - name: 'gcr.io/cloud-builders/docker'
    
  4. 添加步骤参数。步骤的 args 字段采用一个参数列表,并将它们传递给 name 字段引用的构建器。如果 name 字段中的构建器具有入口点,列表中的 args 将用于访问该入口点。如果 name 字段中的构建器没有入口点,则 args 中的第一个元素将用作入口点。

    在以下示例中:

    • build 是 Docker Cloud Build 构建器的入口点
    • -t 是 Docker 标记
    • gcr.io/my-project/my-image 是要构建的映像的名称
    • . 是源代码的位置

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      
  5. 为步骤加入任何其他字段。您可以向构建步骤添加更多字段(例如环境变量和工作目录),以配置构建步骤。有关可以在构建步骤中添加的所有字段的说明,请参阅构建步骤

    以下示例中添加了 timeout 字段,用于指定 docker 步骤必须在 500 秒后超时:

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      timeout: 500s
    
  6. 添加更多步骤。通过添加其他 name 字段并将其指向 Cloud Build 构建器,您可以向构建配置文件添加任意数量的构建步骤。

    以下代码段向构建配置文件中加入两个新增步骤:

    • Docker 构建步骤,用于调用 docker push 命令,将上一步中的映像构建推送到 Container Registry
    • kubectl 构建步骤,用于调用 kubectl set image命令,该命令将映像部署到 Kubernetes Engine 集群。它还添加了 env 字段,用于指定 Compute Engine 地区和 Kubernetes Engine 集群。

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
        timeout: 500s
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 'gcr.io/my-project/my-image']
      - name: 'gcr.io/cloud-builders/kubectl'
        args: ['set', 'image', 'deployment/my-deployment', 'my-container=gcr.io/my-project/my-image']
        env:
        - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
        - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
      
  7. 添加其他构建配置。您可以添加 machineTypetags 等字段来进一步配置构建。如需查看可以在构建配置文件中添加的字段的完整列表,请参阅构建配置概览

    下面的示例为构建添加以下字段:

    • machineType,用于指定运行构建的虚拟机大小。
    • timeout,用于指定构建超时的时间。
    • tags,用于注释构建。

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
        timeout: 500s
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 'gcr.io/my-project/my-image']
      - name: 'gcr.io/cloud-builders/kubectl'
        args: ['set', 'image', 'deployment/my-deployment', 'my-container=gcr.io/my-project/my-image']
        env:
        - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
        - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
      options:
          machineType: 'N1_HIGHCPU_8'
      timeout: 660s
      tags: ['mytag1', 'mytag2']
      
  8. 存储构建的映像和工件。如果构建生成任何容器映像,则可以选择将其存储在 Container Registry 中。您可以使用 images 字段执行此操作。

    以下示例将 Docker 步骤中构建的映像存储到 Container Registry:

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      timeout: 500s
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/my-project/my-image']
    - name: 'gcr.io/cloud-builders/kubectl'
      args: ['set', 'image', 'deployment/my-deployment', 'my-container=gcr.io/my-project/my-image']
      env:
      - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
      - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
    options:
        machineType: 'N1_HIGHCPU_8'
    timeout: 660s
    tags: ['mytag1', 'mytag2']
    images: ['gcr.io/my-project/myimage']
    

    如果构建生成任何非容器工件,则可以使用 artifacts 字段将其存储在 Cloud Storage 中。如需了解如何执行此操作,请参阅存储映像和工件

JSON

  1. 创建构建配置文件。在项目根目录中,创建名为 cloudbuild.json 的文件。这是您的 Cloud Build 构建配置文件。

  2. 添加步骤字段。配置文件中的 steps 部分包含您希望 Cloud Build 执行的构建步骤。

    {
        "steps": [
        {
        }
        ]
    }
    
  3. 添加第一个步骤。在 steps: 下方,添加一个 name 字段并将其指向容器映像,以执行任务。Cloud Build 及其开发者社区提供多个安装有常用工具和语言的容器映像。您可以在构建步骤中使用任何此类映像(又称为 Cloud Builder)或任何公开提供的映像。如需了解可在构建步骤中使用的不同类型的容器映像,请参阅 Cloud Builder

    以下代码段显示了一个带 Docker 构建器 gcr.io/cloud-builders/docker 的构建步骤,这是一个运行 Docker 的容器映像。

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker"
        }
        ]
    }
    
  4. 添加步骤参数。步骤的 args 字段采用一个参数列表,并将它们传递给 name 字段引用的构建器。如果 name 字段中的构建器具有入口点,列表中的 args 将用于访问该入口点。如果 name 字段中的构建器没有入口点,则 args 中的第一个元素将用作入口点。

    在以下示例中:

    • build 是 Docker Cloud Build 构建器的入口点
    • -t 是 Docker 标记
    • gcr.io/my-project/my-image 是要构建的映像的名称
    • . 是源代码的位置

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ]
          }
          ]
      }
      
  5. 为步骤加入任何其他字段。您可以向构建步骤添加更多字段(例如环境变量和工作目录),以配置构建步骤。有关可以在构建步骤中添加的所有字段的说明,请参阅构建步骤

    以下示例中添加了 timeout 字段,用于指定 docker 步骤必须在 500 秒后超时:

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/my-project/my-image",
                "."
            ],
            "timeout": "500s"
        }
        ]
    }
    
  6. 添加更多步骤。通过添加其他名称段并将其指向 Cloud Build 构建器,您可以向构建配置文件添加任意数量的构建步骤。

    以下代码段向构建配置文件添加两个新增步骤:

    • Docker 构建步骤,用于调用 docker push 命令,将上一步中的映像构建推送到 Container Registry
    • kubectl 构建步骤,用于调用 kubectl set image命令,该命令将映像部署到 Kubernetes Engine 集群。它还添加了 env 字段,用于指定 Compute Engine 地区和 Kubernetes Engine 集群。

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ],
              "timeout": "500s"
          },
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "push",
                  "gcr.io/my-project/my-image",
              ],
          },
          {
              "name": "gcr.io/cloud-builders/kubectl",
              "args": [
                  "set",
                  "image",
                  "deployment/my-deployment",
                  "my-container=gcr.io/my-project/my-image"
              ],
              "env": [
                  "CLOUDSDK_COMPUTE_ZONE=us-east4-b",
                  "CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
              ]
          }
          ]
      }
      
  7. 添加其他构建配置。您可以添加 machineTypetags 等字段来进一步配置构建。如需查看可以在构建配置文件中添加的字段的完整列表,请参阅构建配置概览

    下面的示例为构建添加以下字段:

    • machineType,用于指定运行构建的虚拟机大小。
    • timeout,用于指定构建超时的时间。
    • tags,用于注释构建。

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ],
              "timeout": "500s"
          },
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "push",
                  "gcr.io/my-project/my-image",
              ],
          },
          {
              "name": "gcr.io/cloud-builders/kubectl",
              "args": [
                  "set",
                  "image",
                  "deployment/my-deployment",
                  "my-container=gcr.io/my-project/my-image"
              ],
              "env": [
                  "CLOUDSDK_COMPUTE_ZONE=us-east4-b",
                  "CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
              ]
          }
          ],
          "options": {
              "machineType": "N1_HIGHCPU_8"
          },
          "timeout": "660s",
          "tags": [
              "mytag1",
              "mytag2"
          ]
      }
      
  8. 存储构建的映像和工件。如果构建生成任何容器映像,则可以选择将其存储在 Container Registry 中。您可以使用 images 字段执行此操作。

    以下示例将 Docker 步骤中构建的映像存储到 Container Registry:

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/my-project/my-image",
                "."
            ],
            "timeout": "500s"
        },
        {
                "name": "gcr.io/cloud-builders/docker",
                "args": [
                    "push",
                    "gcr.io/my-project/my-image",
                ],
        },
        {
            "name": "gcr.io/cloud-builders/kubectl",
            "args": [
                "set",
                "image",
                "deployment/my-deployment",
                "my-container=gcr.io/my-project/my-image"
            ],
            "env": [
                "CLOUDSDK_COMPUTE_ZONE=us-east4-b",
                "CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
            ]
        }
        ],
        "options": {
            "machineType": "N1_HIGHCPU_8"
        },
        "timeout": "660s",
        "tags": [
            "mytag1",
            "mytag2"
        ],
        "images": [
            "gcr.io/my-project/myimage"
        ]
    }
    

    如果构建生成任何非容器工件,则可以使用 artifacts 字段将其存储在 Cloud Storage 中。如需了解如何执行此操作,请参阅存储映像和工件

后续步骤