定義及使用自訂目標類型

本快速入門導覽課程說明如何使用 Cloud Deploy 建立自訂目標類型,然後部署至該類型的自訂目標。

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

  1. 建立 Skaffold 設定。

    您可以在 Skaffold 設定檔中設定目標的行為。這項設定會參照容器映像檔,以及要在這些映像檔上執行的殼層指令,這些指令是轉譯和部署作業的動作。

  2. 定義自訂目標類型,以及參照該類型的目標。

  3. 定義 Cloud Deploy 推送管道。

    這個管道只包含一個階段,且只使用一個目標。在該階段中,您會參照設定的目標。

  4. 建立發布版本,系統會自動建立推出作業,並執行自訂算繪和部署作業。

    在此版本發布和推行期間,系統會執行 Skaffold 設定中定義的轉譯和部署作業。

  5. 查看自訂作業的結果。包括上傳至 Cloud Storage 的已算繪設定檔、寫入該檔案的字串,以及包含作業狀態的結果檔案。

事前準備

  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. 如果您已安裝 Google Cloud 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. 為特定執行階段新增開發人員角色。
    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
      

    準備 Skaffold 設定

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

    在本快速入門中,您將建立 skaffold.yaml 檔案,定義代表自訂目標類型算繪和部署作業的自訂動作。

    請注意,本快速入門導覽提供的自訂動作不會實際將任何應用程式部署至執行階段。轉譯和部署動作都會將結果檔案上傳至 Cloud Storage,以履行 Cloud Deploy 與使用者定義的轉譯和部署之間的自訂目標合約。

    1. 開啟終端機視窗。

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

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

      apiVersion: skaffold/v4beta7
      kind: Config
      customActions:
      - name: custom-render
        containers:
        - name: render
          image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e
          command: ['/bin/bash']
          args:
            - '-c'
            - |-
              echo "Sample manifest rendered content" > manifest.txt
              gcloud storage cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt
              echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json
              gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
      - name: custom-deploy
        containers:
        - name: deploy
          image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e
          command: ['/bin/bash']
          args:
            - '-c'
            - |-
              echo {\"resultStatus\": \"SUCCEEDED\"} > results.json
              gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
      

      這個檔案包含 customActions: 節,定義自訂算繪動作和自訂部署動作。每個自訂動作都會參照要執行的容器映像檔,以及要在該容器上執行的指令。

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

    建立推送管道、自訂目標類型和目標

    您可以在一個檔案或多個檔案中定義發布管道、自訂目標類型和目標。在本快速入門導覽課程中,您會建立一個檔案,其中包含這三種格式。

    1. 在 custom-target-quickstart 目錄中,建立名為 clouddeploy.yaml 的新檔案,並加入下列內容:

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: custom-targets-pipeline
      serialPipeline:
        stages:
        - targetId: sample-env
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: sample-env
      customTarget:
        customTargetType: basic-custom-target
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: CustomTargetType
      metadata:
        name: basic-custom-target
      customActions:
        renderAction: custom-render
        deployAction: custom-deploy
      
    2. 向 Cloud Deploy 服務註冊管道和目標:

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

      您現在有一個推送管道,其中包含一個目標。這是使用自訂目標類型的目標,且這個管道不會將應用程式部署至執行階段。

    3. 確認管道和目標:

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

      開啟「推送管道」頁面

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

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

    建立發布版本

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

    custom-target-quickstart 目錄執行下列指令,建立代表要部署自訂動作的 release 資源:

    gcloud deploy releases create test-release-001 \
      --project=PROJECT_ID \
      --region=us-central1 \
      --delivery-pipeline=custom-targets-pipeline
    

    與所有版本一樣 (除非包含 --disable-initial-rollout),Cloud Deploy 也會自動建立推出資源。並執行推出作業的所有階段,包括算繪和部署。

    在 Google Cloud 控制台中查看結果

    幾分鐘後,部署作業就會完成。在本例中,由於這兩個自訂動作是將字串回傳至檔案,並將檔案上傳至 Cloud Storage 的指令,因此不會部署至任何目標執行階段。

    不過,您可以查看檔案和檔案中的字串:

    1. 在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送 pipeline) 頁面,查看推送 pipeline (custom-targets-pipeline)。

      開啟「推送管道」頁面

    2. 按一下推送管道的名稱 (custom-targets-pipeline)。

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

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

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

    3. 按一下版本名稱。

      系統會顯示「發行詳細資料」頁面。

    4. 按一下「構件」分頁標籤。

    5. 在「目標構件」下方,按一下「查看構件」連結。

      系統會顯示轉譯的資訊清單檔案。在本例中,檔案是您在 skaffold.yaml 設定檔中定義的自訂算繪動作輸出內容,其中包含「Sample manifest rendered content」字串。

      自訂算繪動作的輸出內容

    6. 找出這個版本建立的 Cloud Storage bucket。

      開啟 Cloud Storage 瀏覽器頁面

      系統會顯示「Buckets」(值區) 頁面,其中包含為這個版本建立的兩個值區。其中一個值區包含交付管道設定檔和已算繪的 skaffold.yaml。另一個則包含自訂動作設定要建立的輸出檔案。

    7. 按一下名稱開頭為 us-central1.deploy-artifacts... 的 bucket。

      Cloud Storage 值區清單

    8. 按一下名稱開頭為 custom-targets-pipeline- 的資料夾,然後按一下 test-release-001 資料夾。

    9. 按一下名稱為推出名稱的資料夾,該名稱應為 test-release-001-to-sample-env-0001

    10. 按一下顯示的資料夾 (UUID),然後按一下 custom-output 資料夾。

    11. 按一下 results.json,然後點選「Authenticated URL」(已通過驗證的網址) 欄位中的超連結網址

      這個檔案包含您在 skaffold.yaml 中,設定為 custom-deploy 動作輸出的字串:

      部署自訂動作的輸出內容

    清除所用資源

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

    1. 刪除推送管道、目標、版本和推出項目:

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

      開啟 Cloud Storage 瀏覽器頁面

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

    後續步驟