使用 Cloud Build 部署至 Cloud Run

本頁說明如何使用 Cloud Build 自動部署 Cloud Run 服務。如果您是第一次使用 Cloud Build,請先參閱快速入門導覽課程建構設定總覽

Cloud Run 可讓您在無伺服器環境中執行無狀態映像檔。您可以使用 Cloud Build,將 Artifact Registry 中的映像檔部署至 Cloud Run。您可以部署現有映像檔、建構及部署映像檔,或自動部署。

事前準備

  • Enable the Cloud Build, Cloud Run, Artifact Registry, and Resource Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

必要的「身分與存取權管理」權限

  1. 在 Google Cloud 控制台中,前往「Cloud Build 權限」頁面:

    前往「Permissions」(權限)

  2. 針對指定的 Cloud Build 服務帳戶預設 Cloud Build 服務帳戶,將下列角色的狀態設為「已啟用」

    • Cloud Run 管理員 (roles/run.admin):允許 Cloud Build 將新服務部署至 Cloud Run。
    • Storage 管理員 (roles/storage.admin):可從 Cloud Storage 讀取及寫入資料。
    • Artifact Registry 寫入者 (roles/artifactregistry.writer):允許從 Artifact Registry 提取映像檔,以及寫入 Artifact Registry。
    • 記錄寫入者 (roles/logging.logWriter):允許將記錄項目寫入 Cloud Logging。
    • Cloud Build 編輯者 (roles/cloudbuild.builds.editor):允許服務帳戶執行建構作業。

建構及部署映像檔

Cloud Build 可讓您建構映像檔、將建構的映像檔儲存在 Artifact Registry 中,然後將映像檔部署至 Cloud Run。

如要建構及部署映像檔,請按照下列步驟操作:

  1. 在專案根目錄中,建立名為 cloudbuild.yaml 的設定檔。

  2. 在建構設定檔中,新增 docker 建構步驟來建構映像檔並將其推送至 Artifact Registry,然後新增 gcloud 建構步驟來叫用 gcloud run deploy 指令,將映像檔部署至 Cloud Run:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
    

    其中:

    • REPOSITORY 是 Artifact Registry 存放區的名稱,您會從該處部署映像檔。
    • LOCATION 是 Artifact Registry 存放區的位置,例如 us-east1
    • PROJECT_ID 是儲存圖片的專案 ID。 Google Cloud
    • SERVICE_NAME 是 Cloud Run 服務的名稱。
    • SERVICE_REGION 是要部署的 Cloud Run 服務區域。
    • IMAGE 是 Artifact Registry 中的映像檔名稱。
  3. 前往專案根目錄,然後執行下列指令,其中 LOCATION支援的建構區域之一,用於執行建構作業:

     gcloud builds submit --region=LOCATION
    

成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。

持續部署

您可以建立 Cloud Build 觸發條件,自動將軟體部署至 Cloud Run。您可以設定觸發條件,在更新原始碼時建構及部署映像檔。

如要自動部署,請按照下列步驟操作:

  1. 在存放區根目錄中,新增名為 cloudbuild.yaml 的設定檔,其中包含建構映像檔、將映像檔推送至 Artifact Registry,然後叫用 gcloud run deploy 指令的步驟:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: 
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
        - '--region'
        - 'SERVICE_REGION'
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
    

    其中:

    • REPOSITORY 是 Artifact Registry 存放區的名稱,您會從該處部署映像檔。
    • LOCATION 是 Artifact Registry 存放區的位置,例如 us-east1
    • PROJECT_ID 是儲存圖片的專案 ID。 Google Cloud
    • SERVICE_NAME 是 Cloud Run 服務的名稱。
    • SERVICE_REGION 是要部署的 Cloud Run 服務區域。
    • IMAGE 是 Artifact Registry 中的映像檔名稱。

    從 Git 存放區觸發時,Cloud Build 會填入 $COMMIT_SHA 替換變數。

  2. 使用上一個步驟中建立的設定檔,建立建構觸發程序:

    1. 開啟「觸發條件」頁面:

      前往「Triggers」(觸發條件) 頁面

    2. 點選「建立觸發條件」

    3. 在「Name」(名稱) 欄位中,輸入觸發條件的名稱。

    4. 在「區域」下方,選取觸發條件的區域

    5. 在「事件」下方,選取要啟動觸發條件的存放區事件。

    6. 在「來源」下方,選取存放區和分支版本或標記名稱,以啟動觸發程序。如要進一步瞭解如何指定要自動建構的分支版本,請參閱建立建構作業觸發條件

    7. 在「設定」下方,選取「Cloud Build 設定檔 (YAML 或 JSON)」

    8. 在「Cloud Build 設定檔位置」欄位中,在 / 後面輸入 cloudbuild.yaml

    9. 按一下「建立」即可儲存建構觸發條件。

    現在,當您將新程式碼推送到存放區時,Cloud Build 會叫用建構作業,並將服務部署至 Cloud Run。

如要進一步瞭解如何建立 Cloud Build 觸發條件,請參閱「建立及管理建構觸發條件」。

程式碼範例

以下是一些範例存放區,每個存放區都包含範例應用程式和建構設定檔,可將應用程式部署至 Cloud Run:

  • deploy-prebuilt: 程式碼範例,說明如何將預先建構的映像檔部署至 Cloud Run。
  • run-example-builddeploy:程式碼範例,說明如何建構映像檔並部署至 Cloud Run。

後續步驟