建立建構設定檔

本頁說明如何建立建構設定檔,以用於在 Cloud Build 中啟動建構。

建構設定檔定義 Cloud Build 執行工作所需的欄位。如果您要使用 gcloud 指令列工具建構觸發條件啟動建構作業,就需要建構設定檔。您可以使用 YAML 或 JSON 語法撰寫建構設定檔。

事前準備

請參閱建構設定總覽,瞭解可在建構設定檔中加入的欄位。

建立建構設定

下列步驟說明如何建立基本的建構設定檔。建構設定檔中的每個欄位都定義您要執行的一部分工作。建構設定檔中唯一的必填欄位是步驟的 name 欄位。所有其他欄位均為選填欄位。

YAML

  1. 建立建構設定檔。在專案根目錄中,建立名為 cloudbuild.yaml 的檔案。這是您的 Cloud Build 設定檔。

  2. 新增步驟欄位。建構設定檔中的 steps 區段包含您想讓 Cloud Build 執行的建構步驟。

    steps:
    
  3. 新增第一個步驟。在 steps: 下,新增 name 欄位,並將其指向要執行工作的容器映像檔。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 雲端建構工具的進入點。
    • -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 欄位,並將其指向雲端建構工具,來新增任意數量的建構步驟至建構設定檔。

    下列程式碼片段在建構設定檔中加入了另外兩個步驟:

    • docker 建構步驟,該步驟叫用 docker push 指令,並將上一步建構的映像檔推送至 Artifact Registry
    • Google Cloud SDK 指令的建構步驟,其中指定 gcloud 進入點,可從 Artifact Registry 中的容器映像檔建立 Compute Engine 例項。這個步驟中包含了 env 欄位,指定 Compute Engine 區域和區域。

       - name: 'gcr.io/cloud-builders/docker'
         args: ['push', '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. 包含其他建構設定欄位。您可以加入 machineTypetagstimeout 等欄位,進一步設定版本。如需可在建構設定檔中包含的完整欄位清單,請參閱建構設定總覽

    在以下範例中,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', 
               '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 及其開發人員社群提供多個安裝了常見工具與語言的容器映像檔。您可以在建構步驟中使用任何映像檔 (也稱為雲端建構工具),或任何開放給大眾使用的映像檔。如要瞭解您可以在建構步驟中使用的不同類型的容器映像檔,請參閱雲端建構工具

    下列程式碼片段示範使用 docker 建構工具 gcr.io/cloud-builders/docker 的建構步驟,這個建構工具是執行 Docker 的容器映像檔。

    {
       "steps": [
          {
             "name": "gcr.io/cloud-builders/docker"
          }
       ]
    }
    
  4. 新增步驟引數。步驟的 args 欄位會取得引數清單,並將其傳送至 name 欄位參照的建構工具。如果 name 欄位中的建構工具有進入點,系統會使用清單中的 args 存取該進入點。如果 name 欄位中的建構工具沒有進入點,系統會將 args 中的第一個元素做為進入點。

    在下列範例中:

    • build 是 Docker 雲端建構工具的進入點。
    • -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 欄位,並將其指向雲端建構工具,來新增任意數量的建構步驟至建構設定檔。

    下列程式碼片段在建構設定檔中加入了另外兩個步驟:

    • docker 建構步驟,該步驟叫用 docker push 指令,並將上一步建構的映像檔推送至 Artifact Registry
    • Google Cloud SDK 指令的建構步驟,其中指定 gcloud 進入點,可從 Artifact Registry 中的容器映像檔建立 Compute Engine 例項。這個步驟中包含了 env 欄位,指定 Compute Engine 區域和區域。

            {
               "name": "gcr.io/cloud-builders/docker",
               "args": [
                  "push",
                  "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. 包含其他建構設定欄位。您可以加入 machineTypetagstimeout 等欄位,進一步設定版本。如需可在建構設定檔中包含的完整欄位清單,請參閱建構設定總覽

    在以下範例中,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",
                "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 中。如需相關操作說明,請參閱「儲存映像檔與成果」。

後續步驟