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

所需的 Identity and Access Management 權限

如要取得使用 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 是儲存圖片的 Google Cloud專案 ID。
    • 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 是儲存圖片的 Google Cloud專案 ID。
    • SERVICE_NAME 是 Cloud Run 服務的名稱。
    • SERVICE_REGION 是您要部署的 Cloud Run 服務所在的區域。
    • IMAGE 是 Artifact Registry 中的映像檔名稱。

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

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

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

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

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

    3. 在「名稱」欄位中,輸入觸發事件的名稱。

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

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

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

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

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

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

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

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

使用最少的 IAM 權限

將映像檔部署至 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[email protected])。

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

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

  5. 輸入 Cloud Build 服務帳戶 ([email protected])

  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[email protected] \
  --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

PROJECT_NUMBER 替換為專案的數字 ID。

如果您使用 Cloud Run 搭配自訂服務身分,請將 [email protected] 替換為服務帳戶地址。

詳情請參閱「部署權限」。

程式碼範例

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

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

後續步驟