使用 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.

    Enable the APIs

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

如要取得使用 Cloud Build 部署至 Cloud Run 時所需的權限,請要求管理員在預設的 Cloud Build 服務帳戶中,授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

建構及部署映像檔

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 服務時,映像檔會使用 Cloud Run 服務的執行階段服務帳戶身分執行。因為 Cloud Build 可以自動部署新映像檔,因此 Cloud Build 必須要能「做為」「Cloud Run 服務的執行階段服務帳戶」來執行。

如要授予 Cloud Build 有限的存取權,以便部署至 Cloud Run 服務,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面:

    前往「Service accounts」(服務帳戶)

  2. 按一下 Cloud Run 服務的執行階段服務帳戶電子郵件地址 (預設為 PROJECT_NUMBER-compute@developer.gserviceaccount.com)。

  3. 按一下「Permissions」(權限) 分頁標籤。

  4. 按一下「授予存取權」

  5. 輸入 Cloud Build 服務帳戶 (PROJECT_NUMBER@cloudbuild.gserviceaccount.com)

  6. 在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Accounts」(服務帳戶) >「Service Account User」(服務帳戶使用者) 角色。

  7. 按一下 [儲存]

gcloud

使用 gcloud iam service-accounts add-iam-policy-binding 指令,其中 PROJECT_NUMBER 是專案的數字 ID

gcloud iam service-accounts add-iam-policy-binding \
  PROJECT_NUMBER-compute@developer.gserviceaccount.com \
  --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

PROJECT_NUMBER 替換為專案的數字 ID。

如果您使用 Cloud Run 時採用自訂服務身分,請將 PROJECT_NUMBER-compute@developer.gserviceaccount.com 替換為服務帳戶地址。

詳情請參閱部署作業權限

程式碼範例

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

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

後續步驟