關於自訂指定目標

本文說明 Cloud Deploy 中自訂目標的運作方式。

Cloud Deploy 內建支援各種執行階段環境,做為目標。但支援的目標類型清單是有限的。透過自訂目標,您可以部署到支援的執行階段以外的其他系統。

自訂目標是指代表任意輸出環境的目標,而非 Cloud Deploy 支援的執行階段。

建立自訂目標」頁面說明瞭定義自訂目標類型,並在推送管道中將其實作為目標的程序。

自訂目標的組成要素

每個自訂目標都包含下列元件:

  • 自訂動作, 定義於 skaffold.yaml

    這與定義部署 Hook 的方式類似。在 skaffold.yaml 檔案中,您可以定義 customActions,其中每個自訂動作都會識別要使用的容器映像檔,以及要在該容器上執行的指令。

    因此,自訂目標只是自訂定義的動作或一組動作。

    對於任何自訂目標類型,您都可以設定自訂轉譯動作和自訂部署動作。這些動作會取用 Cloud Deploy 提供的值,且必須滿足一組必要輸出

    自訂顯示動作為選用項目,但除非自訂目標由 skaffold render 顯示時可正常運作 (這是 Cloud Deploy 的預設值),否則您必須建立自訂顯示動作。

  • 自訂目標類型定義

    CustomTargetType 是 Cloud Deploy 資源,可識別此類型目標用於版本轉譯和推出部署活動的自訂動作 (在 skaffold.yaml 中另外定義)。

  • 目標定義

    自訂目標的目標定義與任何目標類型相同, 但包含 customTarget 屬性,其值為 CustomTargetType 的名稱。

有了這些元件,您就能像使用任何目標一樣使用目標,從推送管道進度參照目標,並充分運用 Cloud Deploy 功能,例如升級和核准,以及復原

範例

快速入門導覽課程「定義及使用自訂目標類型」會建立自訂目標類型,其中包含要在容器映像檔上執行的簡單指令,一個用於轉譯,另一個用於部署。在本例中,指令只會將文字新增至算繪和部署作業所需的輸出檔案。

如需更多範例,請參閱「自訂目標範例」。

必要輸入和輸出

為 Cloud Deploy 定義的任何自訂目標類型,都必須滿足轉譯和部署的輸入和輸出需求。本節列出必要輸入內容和輸出內容,以及提供方式。

Cloud Deploy 會以環境變數的形式,提供算繪和部署作業所需的輸入內容。以下章節列出這些輸入內容,以及自訂算繪和部署動作必須傳回的輸出內容。

將參數部署為環境變數

除了本節列出的環境變數外,Cloud Deploy 還可以將您設定的任何部署參數傳遞至自訂容器。

瞭解詳情

用於算繪動作的輸入內容

對於自訂算繪動作,Cloud Deploy 會以環境變數的形式提供下列輸入內容。如果是多階段推出 (Canary 部署作業),Cloud Deploy 會為每個階段提供這些變數。

  • CLOUD_DEPLOY_PROJECT

    自訂目標建立所在專案的 Google Cloud 專案編號。

  • CLOUD_DEPLOY_PROJECT_ID

    專案的 Google Cloud 專案 ID。

  • CLOUD_DEPLOY_LOCATION

    自訂目標類型的 Google Cloud 區域。

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    參照自訂目標類型的 Cloud Deploy 推送管道名稱。

  • CLOUD_DEPLOY_RELEASE

    叫用轉譯作業的版本名稱。

  • CLOUD_DEPLOY_TARGET

    使用自訂目標類型的 Cloud Deploy 目標名稱。

  • CLOUD_DEPLOY_PHASE

    與算繪內容對應的推出階段

  • CLOUD_DEPLOY_REQUEST_TYPE

    如果是自訂算繪動作,這個值一律為 RENDER

  • CLOUD_DEPLOY_FEATURES

    以半形逗號分隔的清單,列出自訂容器必須支援的 Cloud Deploy 功能。這個變數會根據推送管道中設定的功能填入。

    如果您的實作方式不支援這份清單中的功能,建議在算繪期間失敗。

    如果是標準部署,這個欄位會是空白。如果是初期測試部署,值為 CANARY。如果 Cloud Deploy 提供的值為 CANARY,系統會為 Canary 中的每個階段叫用算繪動作。每個階段的 Canary 百分比會提供在 CLOUD_DEPLOY_PERCENTAGE_DEPLOY 環境變數中。

  • CLOUD_DEPLOY_PERCENTAGE_DEPLOY

    與這個算繪作業相關聯的部署作業百分比。如果 CLOUD_DEPLOY_FEATURES 環境變數設為 CANARY,系統會為每個階段呼叫自訂算繪動作,並將這個變數設為每個階段的 Canary 百分比。如果是標準部署,以及已達到 stable 階段的初期測試部署,則為 100

  • CLOUD_DEPLOY_STORAGE_TYPE

    儲存空間供應商。一律 GCS

  • CLOUD_DEPLOY_INPUT_GCS_PATH

    建立版本時寫入的算繪檔案封存檔 Cloud Storage 路徑。

  • CLOUD_DEPLOY_OUTPUT_GCS_PATH

    自訂算繪容器的 Cloud Storage 路徑,預期會上傳用於部署作業的構件。請注意,算繪動作必須上傳名為 results.json 的檔案,其中包含這項算繪作業的結果。詳情請參閱「算繪動作的輸出內容」。

轉譯動作的輸出內容

自訂算繪動作必須提供本節所述資訊。這項資訊必須包含在名為 results.json 的結果檔案中,該檔案位於 Cloud Deploy 提供的 Cloud Storage bucket 中。

  • 已算繪的設定檔

  • results.json 檔案,包含下列資訊:

    • 自訂動作的成功或失敗狀態指標。

      有效值為 SUCCEEDEDFAILED

    • (選用) 自訂動作產生的任何錯誤訊息。

    • 已算繪設定檔的 Cloud Storage 路徑。

      所有已算繪設定檔的路徑都是完整 URI。您可以使用 Cloud Deploy CLOUD_DEPLOY_OUTPUT_GCS_PATH 提供的值,部分填入這個欄位。

      即使設定檔是空白,也必須提供經過算繪的設定檔。檔案內容不限,格式也不限,只要自訂部署動作可使用即可。建議您讓這個檔案可供人閱讀,這樣您和貴機構的其他使用者就能在版本檢查器中查看這個檔案。

    • (選用) 要納入的任何中繼資料對應

      自訂目標會建立這項中繼資料。這項中繼資料會儲存在發行內容的 custom_metadata 欄位中。

如需檢查 results.json 檔案 (例如進行偵錯),您可以在 Cloud Build 記錄中找到該檔案的 Cloud Storage URI。

範例算繪結果檔案

以下是自訂算繪動作輸出的 results.json 檔案範例:

{
  "resultStatus": "SUCCEEDED",
  "manifestFile": "gs://bucket/my-pipeline/release-001/rollout-a/01234/custom-output/manifest.yaml",
  "failureMessage": "",
  "metadata": {
    "key1": "val",
    "key2": "val"
  }
}

部署動作的輸入內容

對於自訂部署動作,Cloud Deploy 提供下列輸入內容 (以環境變數形式):

  • CLOUD_DEPLOY_PROJECT

    自訂目標建立所在專案的 Google Cloud 專案編號。

  • CLOUD_DEPLOY_PROJECT_ID

    專案的 Google Cloud 專案 ID。

  • CLOUD_DEPLOY_LOCATION

    自訂目標類型的 Google Cloud 區域。

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    參照使用自訂目標類型的目標的 Cloud Deploy 部署管道名稱。

  • CLOUD_DEPLOY_RELEASE

    要叫用部署作業的版本名稱。

  • CLOUD_DEPLOY_ROLLOUT

    這項部署作業所屬的 Cloud Deploy 推出作業名稱。

  • CLOUD_DEPLOY_TARGET

    使用自訂目標類型的 Cloud Deploy 目標名稱。

  • CLOUD_DEPLOY_PHASE

    部署作業對應的發布階段

  • CLOUD_DEPLOY_REQUEST_TYPE

    如果是自訂部署動作,這個值一律為 DEPLOY

  • CLOUD_DEPLOY_FEATURES

    以半形逗號分隔的清單,列出自訂容器必須支援的 Cloud Deploy 功能。這個變數會根據推送管道中設定的功能填入。

    如果您的實作方式不支援這份清單中的功能,建議在算繪期間失敗。

    如果是標準部署,這個欄位會是空白。如果是初期測試部署,值為 CANARY。如果 Cloud Deploy 提供的值為 CANARY,系統會為 Canary 中的每個階段叫用算繪動作。每個階段的 Canary 百分比會提供在 CLOUD_DEPLOY_PERCENTAGE_DEPLOY 環境變數中。

  • CLOUD_DEPLOY_PERCENTAGE_DEPLOY

    與這項部署作業相關聯的部署作業百分比。如果 CLOUD_DEPLOY_FEATURES 環境變數設為 CANARY,系統會為每個階段呼叫自訂部署動作,並將這個變數設為每個階段的 Canary 百分比。您必須為每個階段執行部署動作。

  • CLOUD_DEPLOY_STORAGE_TYPE

    儲存空間供應商。一律 GCS

  • CLOUD_DEPLOY_INPUT_GCS_PATH

    自訂算繪器寫入算繪設定檔的 Cloud Storage 路徑。

  • CLOUD_DEPLOY_SKAFFOLD_GCS_PATH

    已算繪 Skaffold 設定的 Cloud Storage 路徑。

  • CLOUD_DEPLOY_MANIFEST_GCS_PATH

    已算繪資訊清單檔案的 Cloud Storage 路徑。

  • CLOUD_DEPLOY_OUTPUT_GCS_PATH

    自訂部署容器預期上傳部署構件的 Cloud Storage 目錄路徑。詳情請參閱「部署動作的輸出內容」。

部署動作的輸出內容

自訂部署動作必須寫入 results.json 輸出檔案。這個檔案必須位於 Cloud Deploy 提供的 Cloud Storage 值區 (CLOUD_DEPLOY_OUTPUT_GCS_PATH)。

檔案必須包含下列項目:

  • 自訂部署動作的成功或失敗狀態指標。

    有效狀態如下:

    • SUCCEEDED

    • FAILED

    • SKIPPED

    這是指略過初期測試階段的初期測試部署,直接進入 stable

  • (選用) 部署構件檔案清單,格式為 Cloud Storage 路徑

    路徑是完整 URI。您可以使用 Cloud Deploy CLOUD_DEPLOY_OUTPUT_GCS_PATH 提供的值,部分填入這個檔案。

    這裡列出的檔案會填入工作執行資源,做為部署構件。

  • (選用) 失敗訊息 (如果自訂部署動作失敗,也就是傳回 FAILED 狀態)

    這則訊息會用來在部署動作的工作執行中填入 failure_message

  • (選用) 略過訊息,在動作傳回 SKIPPED 狀態時提供額外資訊。

  • (選用) 要納入的任何中繼資料對應

    自訂目標會建立這項中繼資料。這項中繼資料會儲存在工作執行和推出作業的 custom_metadata 欄位中。

如需檢查 results.json 檔案 (例如進行偵錯),您可以在 Cloud Build 版本算繪記錄中找到該檔案的 Cloud Storage URI。

部署結果檔案範例

以下是自訂部署動作輸出的 results.json 檔案範例:

{
  "resultStatus": "SUCCEEDED",
  "artifactFiles": [
    "gs://bucket/my-pipeline/release-001/rollout-a/01234/custom-output/file1.yaml",
    "gs://bucket/my-pipeline/release-001/rollout-a/01234/custom-output/file2.yaml"
  ],
  "failureMessage": "",
  "skipMessage": "",
  "metadata": {
    "key1": "val",
    "key2": "val"
  }
}

進一步瞭解自訂動作

設定及使用自訂目標類型時,請注意下列事項。

執行自訂動作

自訂轉譯和部署動作會在 Cloud Deploy 執行環境中執行。您無法設定自訂動作,在 Google Kubernetes Engine 叢集上執行。

使用可重複使用的遠端 Skaffold 設定

如本文所述,您可以在建立版本時提供的 skaffold.yaml 檔案中設定自訂動作。但您也可以將 Skaffold 設定儲存在 Git 存放區或 Cloud Storage 值區中,並從自訂目標類型定義參照這些設定。這樣一來,您就能使用在單一共用位置定義及儲存的自訂動作,不必在每個版本的 skaffold.yaml 檔案中加入自訂動作。

自訂目標和部署策略

標準部署作業完全支援自訂目標。

只要自訂的算繪器和部署工具支援初期測試功能,Cloud Deploy 就支援初期測試部署

您必須使用自訂 Canary 設定。自訂目標不支援自動和自訂自動 Canary。

自訂目標和部署參數

您可以搭配自訂目標使用部署參數。您可以在放送管道的階段、使用自訂目標類型的目標,或版本中設定這些目標。

除了已提供的參數,部署參數也會以環境變數的形式,傳遞至自訂轉譯和部署容器。

自訂目標範例

cloud-deploy-samples 存放區包含一組自訂目標實作範例。以下是可用的範例:

  • GitOps

  • Vertex AI

  • Terraform

  • Infrastructure Manager

  • Helm

每個範例都包含快速入門導覽課程。

這些樣品並非支援的產品,且不在支援合約的涵蓋範圍內。 Google Cloud Google Cloud 如要回報產品錯誤或要求功能,請與支援團隊聯絡。 Google Cloud Google Cloud

後續步驟