创建基本的构建配置文件

本页面介绍如何创建可用于在 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 标记。
    • us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image 是要在 Artifact Registry 中构建的映像的名称。构建步骤使用默认替换作为项目 ID,因此该值会在构建时自动替换。
    • . 是源代码的位置,表示源代码位于当前工作目录中。

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image', '.']
      
  5. 添加更多步骤。通过添加其他 name 字段并将其指向 Cloud Build 构建器,您可以向构建配置文件添加任意数量的构建步骤。

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

    • Docker 构建步骤,用于调用 docker push 命令,将上一步中的映像构建推送到 Artifact Registry
    • Google Cloud SDK 命令的构建步骤,指定了 gcloud 入口点,该步骤通过 Artifact Registry 中的容器映像创建 Compute Engine 实例。它还添加了 env 字段,用于指定 Compute Engine 地区和区域。

       - name: 'gcr.io/cloud-builders/docker'
         args: ['push', '-image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image']
       - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
         entrypoint: 'gcloud'
         args: ['compute', 'instances', 'create-with-container', 'my-vm-name', '--container-image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image']
         env:
         - 'CLOUDSDK_COMPUTE_REGION=us-central1'
         - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
      
  6. 添加其他构建配置字段。您可以添加 machineTypetagtimeout 等字段来进一步配置构建。如需查看可以在构建配置文件中添加的字段的完整列表,请参阅构建配置概览

    在以下示例中,gcr.io/google.com/cloudsdktool/cloud-sdk 构建步骤会在 240 秒后超时。

      - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
        entrypoint: 'gcloud'
        timeout: 240s
        args: ['compute', 'instances', 'create-with-container', 'my-vm-name', '--container-image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image']
        env:
        - 'CLOUDSDK_COMPUTE_REGION=us-central1'
        - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
    

    如需查看基本构建配置文件的完整示例,请参阅以下代码段:

    steps:
      # Docker Build
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t',
               'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage',
               '.']
    
      # Docker Push
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', '-image',
               'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage']
    
      # Entrypoint, timeout and environment variables
      - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
        entrypoint: 'gcloud'
        timeout: 240s
        args: ['compute', 'instances',
               'create-with-container', 'my-vm-name',
               '--container-image',
               'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage']
        env:
          - 'CLOUDSDK_COMPUTE_REGION=us-central1'
          - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'

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

JSON

  1. 创建构建配置文件。在项目根目录中,创建名为 cloudbuild.json 的文件。这是您的 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 标记。
    • us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image 是要在 Artifact Registry 中构建的映像的名称。构建步骤使用默认替换作为项目 ID,因此该值会在构建时自动替换。
    • . 是源代码的位置,表示源代码位于当前工作目录中。

      {
         "steps": [
            {
               "name": "gcr.io/cloud-builders/docker",
               "args": [
                  "build",
                  "-t",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage",
                  "."
               ]
            }
         ]
      }
      
  5. 添加更多步骤。通过添加其他 name 字段并将其指向 Cloud Build 构建器,您可以向构建配置文件添加任意数量的构建步骤。

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

    • Docker 构建步骤,用于调用 docker push 命令,将上一步中的映像构建推送到 Artifact Registry
    • Google Cloud SDK 命令的构建步骤,指定了 gcloud 入口点,该步骤通过 Artifact Registry 中的容器映像创建 Compute Engine 实例。它还添加了 env 字段,用于指定 Compute Engine 地区和区域。

            {
               "name": "gcr.io/cloud-builders/docker",
               "args": [
                  "push",
                  "-image",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
               ]
            },
            {
               "name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
               "entrypoint": "gcloud",
               "args": [
                  "compute",
                  "instances",
                  "create-with-container",
                  "my-vm-name",
                  "--container-image",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
               ],
               "env": [
                  "CLOUDSDK_COMPUTE_REGION=us-central1",
                  "CLOUDSDK_COMPUTE_ZONE=us-central1-a"
               ]
            }
      
  6. 添加其他构建配置字段。您可以添加 machineTypetagtimeout 等字段来进一步配置构建。如需查看可以在构建配置文件中添加的字段的完整列表,请参阅构建配置概览

    在以下示例中,gcr.io/google.com/cloudsdktool/cloud-sdk 构建步骤会在 240 秒后超时。

          {
             "name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
             "entrypoint": "gcloud",
             "timeout": "240s",
             "args": [
                "compute",
                "instances",
                "create-with-container",
                "my-vm-name",
                "--container-image",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
             ],
             "env": [
                "CLOUDSDK_COMPUTE_REGION=us-central1",
                "CLOUDSDK_COMPUTE_ZONE=us-central1-a"
             ]
          }
    

    如需查看基本构建配置文件的完整示例,请参阅以下代码段:

    {
       "steps": [
          {
             "name": "gcr.io/cloud-builders/docker",
             "args": [
                "build",
                "-t",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage",
                "."
             ]
          },
          {
             "name": "gcr.io/cloud-builders/docker",
             "args": [
                "push",
                "-image",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
             ]
          },
          {
             "name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
             "entrypoint": "gcloud",
             "timeout": "240s",
             "args": [
                "compute",
                "instances",
                "create-with-container",
                "my-vm-name",
                "--container-image",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
             ],
             "env": [
                "CLOUDSDK_COMPUTE_REGION=us-central1",
                "CLOUDSDK_COMPUTE_ZONE=us-central1-a"
             ]
          }
       ]
    }
    

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

后续步骤