使用 Cloud Deploy 將應用程式部署至 Cloud Run

本頁面說明如何使用 Cloud Deploy,將名為 hello 的應用程式範例映像檔,提交至兩個 Cloud Run 服務或兩個 Cloud Run 工作序列。

在本快速入門導覽課程中,您將執行以下操作:

  1. 建立 Skaffold 設定

  2. 為兩個 Cloud Run 服務或兩個工作建立設定檔。

    這些檔案會定義服務或工作,並指定要部署的 (預先建構) 容器映像檔。

  3. 定義 Cloud Deploy 提交管道和部署目標,指向兩項服務或兩項工作。

  4. 建立版本,讓系統自動部署至第一個目標,以此例項化推送管道。

  5. 將版本推送至第二個目標。

  6. 在 Google Cloud 控制台中查看這兩項功能的推播狀態。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 如果您已安裝 CLI,請確認您執行的是最新版本:

    gcloud components update
    

  15. 請確認預設的 Compute Engine 服務帳戶具備足夠的權限。

    服務帳戶可能已具備必要權限。如果專案已停用為預設服務帳戶自動授予角色的功能,則適用這些步驟。

    1. 新增 clouddeploy.jobRunner 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      

    2. 授予預設執行服務帳戶 actAs 部署工作負載至 Cloud Run 的權限

      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

    3. 新增 Cloud Run 開發人員權限:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/run.developer"
      

      如果無法順利新增這兩種角色,請與專案管理員聯絡。

準備 Skaffold 設定

Cloud Deploy 會使用 Skaffold,為您提供詳細資訊,說明要部署哪些內容,以及如何為個別目標正確部署。

在本快速入門課程中,您會建立 skaffold.yaml 檔案,用於識別用來部署範例應用程式的 Cloud Run 服務或工作定義。

  1. 開啟終端機視窗。

  2. 建立名為 deploy-run-quickstart 的新目錄,然後前往該目錄。

    mkdir deploy-run-quickstart
    cd deploy-run-quickstart
    
  3. 建立名為 skaffold.yaml 的檔案,並在當中加入下列內容:

    服務

    apiVersion: skaffold/v4beta7
    kind: Config
    metadata: 
      name: deploy-run-quickstart
    profiles:
    - name: dev
      manifests:
        rawYaml:
        - run-service-dev.yaml
    - name: prod
      manifests:
        rawYaml:
        - run-service-prod.yaml
    deploy:
      cloudrun: {}
    

    工作

    apiVersion: skaffold/v4beta7
    kind: Config
    metadata: 
      name: deploy-run-quickstart
    profiles:
    - name: dev
      manifests:
        rawYaml:
        - run-job-dev.yaml
    - name: prod
      manifests:
        rawYaml:
        - run-job-prod.yaml
    deploy:
      cloudrun: {}
    

    這個檔案是基本 Skaffold 設定,可識別 Cloud Run 服務或工作。如要進一步瞭解此檔案,請參閱 skaffold.yaml 參考資料

準備 Cloud Run 服務或工作

在這個快速入門課程中,您將在同一個專案中建立兩個不同的 Cloud Run 服務或兩個 Cloud Run 工作。Cloud Deploy 也支援跨多個專案部署。此外,我們使用 Skaffold 設定檔,讓同一個專案中可以有兩項服務或工作。使用不同專案時,您可能不需要使用 Skaffold 設定檔。

服務

  1. 建立名為 run-service-dev.yaml 的檔案,並在當中加入下列內容:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: deploy-run-service-dev
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    這個檔案定義了 Cloud Run 服務。如名稱 deploy-run-service-dev 所示,這是 dev 服務,對應於發布管道進度中的第 1 個目標。

  2. 建立名為 run-service-prod.yaml 的檔案,並在當中加入下列內容:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: deploy-run-service-prod
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    這個檔案會定義另一個 Cloud Run 服務,而如名稱 deploy-run-service-prod 所示,這是 prod 服務,對應於發布管道進度中的第二個目標。

這些檔案是簡單的 Cloud Run 服務定義,用於部署應用程式。要部署的容器映像檔會在此處設為預留位置 my-app-image,並在您建立版本時替換為特定映像檔。

工作

  1. 建立名為 run-job-dev.yaml 的檔案,並在當中加入下列內容:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: deploy-run-job-dev
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: my-app-image
    

    這個檔案會定義 Cloud Run 工作。如名稱 deploy-run-job-dev 所示,這是 dev 工作,對應於推送管道進度中的第一個目標。

  2. 建立名為 run-job-prod.yaml 的檔案,並在當中加入下列內容:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: deploy-run-job-prod
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: my-app-image
    

    這個檔案定義了另一個 Cloud Run 工作。顧名思義,這是 prod 工作,對應於發布管道進度中的第二個目標。deploy-run-job-prod

這些檔案是簡單的 Cloud Run 工作定義,用於部署應用程式。要部署的容器映像檔會在此處設為預留位置 my-app-image,並在建立版本時替換為特定映像檔。

建立推送管道和目標

您可以在一個檔案或個別檔案中定義管道和目標。在本快速入門導覽課程中,您將建立單一檔案。

  1. deploy-run-quickstart 目錄中建立新檔案 clouddeploy.yaml,並加入下列內容:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-run-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: run-qsdev
        profiles: [dev]
      - targetId: run-qsprod
        profiles: [prod]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: run-qsdev
    description: Cloud Run development service
    run:
      location: projects/PROJECT_ID/locations/us-central1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: run-qsprod
    description: Cloud Run production service
    run:
      location: projects/PROJECT_ID/locations/us-central1
    
  2. 使用 Cloud Deploy 服務註冊管道和目標:

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    您現在已擁有管道和目標,可以將應用程式部署至第一個目標。

  3. 確認管道和目標:

    在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看可用的推送管道清單。

    開啟「Delivery pipelines」頁面

    系統會顯示您剛建立的提交管道,並在「目標」欄中列出兩個目標。

     Google Cloud 控制台顯示的提交管道

建立版本

版本是代表待部署變更的集中式 Cloud Deploy 資源。發布管道會定義該版本的生命週期。如要進一步瞭解這個生命週期,請參閱 Cloud Deploy 服務架構

deploy-run-quickstart 目錄執行下列指令,建立代表要部署的容器映像檔的 release 資源:

服務

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-run-demo-app-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a

工作

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-run-demo-app-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/job@sha256:8eb3f5e72586de6375abe95aa67511c57c61d35fb37d5670e4d68624a68ef916

請注意 --images= 旗標,您可以使用該旗標將服務或工作定義中的預留位置 (my-app-image) 替換為特定的 SHA 合格映像檔。Google 建議您以這種方式建立服務和工作定義範本,並在建立版本時使用 SHA 合格映像檔名稱。

如同所有版本 (除非包含 --disable-initial-rollout),Cloud Deploy 也會自動建立rollout 資源。應用程式會自動部署至程序中的第一個目標。

推送版本

  1. 在「Delivery pipelines」頁面中,按一下 my-run-demo-app-1 管道。

    開啟「Delivery pipelines」頁面

    「提交管道詳細資料」頁面會以圖表呈現提交管道的進度。在本例中,這表示版本已部署至 run-qsdev 目標。

     Google Cloud 控制台的發布管道視覺化圖表

  2. 在發布管道圖表中的第一個目標上,按一下「提交」

    系統會顯示「宣傳版本」對話方塊。這個頁面會顯示您要宣傳的目標對象詳細資料。

  3. 點選「升級」。

    該版本現在已排入佇列,等待部署至 run-qsprod。部署完成後,發布管道圖表會顯示已部署:

     Google Cloud 控制台中的發布管道示意圖,顯示已部署至實際環境的版本。

在 Google Cloud 控制台中查看結果

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看「my-run-demo-app-1」推送管道。

    開啟「Delivery pipelines」頁面

  2. 按一下推送管道名稱「my-run-demo-app-1」。

    管道圖表會顯示應用程式在管道中的進度。

     Google Cloud 控制台中的發布管道視覺化圖表

    你的版本會列在「發布管道詳細資料」下方的「版本」分頁中。

  3. 按一下版本名稱 test-release-001

    推出計畫會顯示在「推出計畫」下方。您可以按一下推行內容,查看詳細資料,包括部署記錄。

    在 Google Cloud 控制台中進行推播

存取 Cloud Run 服務

根據預設,您必須完成驗證,才能存取新建立的 Cloud Run 服務。請參閱 Cloud Run 的驗證總覽,瞭解如何提供憑證,以及需要進行哪些身分和存取權管理設定,才能在未經過驗證的情況下存取服務。這項規定不適用於 Cloud Run 工作。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取您在本頁所用資源的費用,請按照下列步驟操作。

  1. 刪除 deploy-qs-dev Cloud Run 服務或工作:

    服務

    gcloud run services delete deploy-run-service-dev --region=us-central1 --project=PROJECT_ID
    

    工作

    gcloud run jobs delete deploy-run-job-dev --region=us-central1 --project=PROJECT_ID
    
  2. 刪除 deploy-qs-prod 服務:

    服務

    gcloud run services delete deploy-run-service-prod --region=us-central1 --project=PROJECT_ID
    

    工作

    gcloud run jobs delete deploy-run-job-prod --region=us-central1 --project=PROJECT_ID
    
  3. 刪除推送管道、目標、版本和推出項目:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  4. 刪除 Cloud Deploy 建立的 Cloud Storage 值區。

    一個結尾是 _clouddeploy,另一個是 [region].deploy-artifacts.[project].appspot.com

    開啟 Cloud Storage 瀏覽器頁面

大功告成,您已經完成本快速入門導覽課程!

後續步驟