部署應用程式後進行驗證

本快速入門導覽課程說明如何使用 Cloud Deploy 驗證已部署的應用程式,這是推送管道的一部分。

在本快速入門導覽課程中,您將完成下列事項:

  1. 建立一個 GKE 叢集或一個 Cloud Run 服務。

    您也可以在 GKE Enterprise 叢集上使用部署作業驗證功能,但本快速入門指南只會使用 GKE 和 Cloud Run。

  2. 建立 Skaffold 設定,以及 Kubernetes 資訊清單或 Cloud Run 服務定義。

    您可以在 Skaffold 設定檔中設定部署驗證容器,以便在部署後執行。

  3. 定義 Cloud Deploy 推送管道和部署目標。

    在推送管道設定中,您將參照 skaffold.yaml 中定義的部署驗證,執行該驗證。

    這個管道只包含一個階段,且只使用一個目標。

  4. 建立版本,系統會自動部署至目標。

    應用程式部署完成後,系統會以推出階段的形式執行驗證

  5. 在 Cloud Build 記錄中查看驗證結果,方法是使用Google Cloud console 中的 Cloud Deploy「Rollout details」(推出詳細資料) 頁面。

事前準備

  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. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  7. 如要初始化 gcloud CLI,請執行下列指令:

    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. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  13. 如要初始化 gcloud CLI,請執行下列指令:

    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. 為特定執行階段新增開發人員角色。
      • 如果是 GKE:

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

      • 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"
        

    3. 新增 iam.serviceAccountUser 角色,其中包含要部署至執行階段的 actAs 權限:

      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
      

    建立執行階段環境

    如果您要部署至 Cloud Run,可以略過這個指令

    如果是 GKE,請建立一個叢集:deploy-verification-cluster,並使用預設設定。叢集的 Kubernetes API 端點必須可從公開網際網路連上網路。根據預設,GKE 叢集可從外部存取。

    gcloud container clusters create-auto deploy-verification-cluster \
                     --project=PROJECT_ID \
                     --region=us-central1
    

    準備 Skaffold 設定和應用程式資訊清單

    Cloud Deploy 會使用 Skaffold 提供詳細資料,說明要部署的內容,以及如何將內容部署至目標

    在本快速入門導覽課程中,您將建立 skaffold.yaml 檔案,用於識別部署範例應用程式時要使用的資訊清單,以及部署後要執行的容器 (部署驗證)。

    1. 開啟終端機視窗。

    2. 建立新目錄並前往該目錄。

      GKE

      mkdir deploy-verification-gke-quickstart
      cd deploy-verification-gke-quickstart
      

      Cloud Run

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

      GKE

      apiVersion: skaffold/v4beta7
      kind: Config
      manifests:
        rawYaml:
        - k8s-pod.yaml
      deploy:
        kubectl: {}
      verify:
      - name: verification-test
        container:
          name: verification-echo
          image: ubuntu
          command: ["/bin/sh"]
          args: ["-c", 'echo "Your test or tests would go here."' ]
      

      Cloud Run

      apiVersion: skaffold/v4beta7
      kind: Config
      manifests:
        rawYaml:
        - service.yaml
      deploy:
        cloudrun: {}
      verify:
      - name: verification-test
        container:
          name: verification-echo
          image: ubuntu
          command: ["/bin/sh"]
          args: ["-c", 'echo "Your test or tests would go here."' ]
      

      這個檔案包含 verify: 節,定義容器和要在部署應用程式後執行的指令。在本例中,我們要部署 Ubuntu 容器,並執行簡單的 echo 指令。您可以在記錄檔中查看這項指令的結果。在更實際的情境中,您會針對已部署的應用程式執行測試。

      如要進一步瞭解這個設定檔,請參閱 skaffold.yaml 參考資料

    4. 建立應用程式的定義,也就是 Cloud Run 的服務定義或 GKE 的 Kubernetes 資訊清單。

      GKE

      建立名為 k8s-pod.yaml 的檔案,並在當中加入下列內容:

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-verification-pod
      spec:
        containers:
        - name: nginx
          image: my-app-image
      

      這個檔案是基本的 Kubernetes 資訊清單,會套用至叢集以部署應用程式。要部署的容器映像檔在此設為預留位置 my-app-image,您建立版本時,會將其替換為特定映像檔。

      Cloud Run

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

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

      這個檔案是基本的 Cloud Run 服務定義,用於部署應用程式。要部署的容器映像檔在此設定為預留位置 my-app-image,當您建立版本時,會以特定映像檔取代。

    建立推送管道和目標

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

    1. 建立推送管道和目標定義:

      GKE

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

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: deploy-verification-demo-app-gke-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: verify-staging
          profiles: []
          strategy:
            standard:
              verify: true
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: verify-staging
      description: verification staging cluster
      gke:
        cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-verification-cluster
      

      Cloud Run

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

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: deploy-verification-demo-app-run-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: verify-staging
          profiles: []
          strategy:
            standard:
              verify: true
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: verify-staging
      description: staging Run 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」(推送管道) 頁面,查看可用推送管道的清單。

      開啟「推送管道」頁面

      您剛建立的推送管道會顯示在「目標」欄中,並列出一個目標。

       Google Cloud 控制台中的推送管道頁面,顯示您的管道

    建立發布版本

    「版本」是 Cloud Deploy 的核心資源,代表要部署的變更。推送 pipeline 會定義該版本的生命週期。如要進一步瞭解該生命週期,請參閱 Cloud Deploy 服務架構

    GKE

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

     gcloud deploy releases create test-release-001 \
       --project=PROJECT_ID \
       --region=us-central1 \
       --delivery-pipeline=deploy-verification-demo-app-gke-1 \
       --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
    

    請注意 --images= 旗標,您可以使用這個旗標,將資訊清單中的預留位置 (my-app-image) 換成符合 SHA 資格的特定圖片。Google 建議您以這種方式將資訊清單範本化,並在建立發布版本時使用 SHA 合格的映像檔名稱。

    Cloud Run

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

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

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

    與所有版本一樣 (除非包含 --disable-initial-rollout),Cloud Deploy 也會自動建立推出資源。應用程式會自動部署到為這個發布管道設定的目標。

    在應用程式部署完成後,我們在 Skaffold 設定中指定的驗證工作會做為這項推出作業的一部分執行。

    在 Google Cloud 控制台中查看結果

    幾分鐘後,版本就會部署至目標執行階段。

    我們設定的驗證工作 (僅為示範用途) 會將字串列印到 Cloud Build 記錄檔。我們可以查看該記錄,確認驗證作業是否正常運作。

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

      開啟「推送管道」頁面

    2. 點選推送管道的名稱 (「deploy-verification-demo-app-gke-1」或「deploy-verification-demo-app-run-1」)。

      管道視覺化會顯示應用程式的部署狀態。由於管道中只有一個階段,因此視覺化內容只會顯示一個節點。

      顯示成功的推送管道視覺化

      發行內容會列在「推送 pipeline 詳細資料」下方的「發行內容」分頁中。

    3. 按一下「發布」分頁標籤,位於「發布管道詳細資料」下方。

    4. 按一下推出名稱,即可查看推出詳細資料。

       Google Cloud 控制台中的推出作業

      「驗證」列為工作。

    5. 按一下「驗證」

      系統隨即會顯示工作執行記錄。

    6. 在記錄項目清單中向下捲動,找出 verification-test 並點按。

      記錄項目,顯示「驗證」工作的輸出內容

      請注意 textPayload。該字串是在Skaffold 設定Verify 節中設定。

    清除所用資源

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

    1. 刪除 GKE 叢集或 Cloud Run 服務:

      GKE

      gcloud container clusters delete deploy-verification-cluster --region=us-central1 --project=PROJECT_ID
      

      Cloud Run

      gcloud run services delete my-verification-run-service --region=us-central1 --project=PROJECT_ID
      
    2. 刪除推送管道、目標、版本和推出項目:

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

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

      開啟 Cloud Storage 瀏覽器頁面

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

    後續步驟