本文說明如何建立自訂 Cloud Deploy 目標類型,並在 Cloud Deploy 推送管道中,將該自訂目標類型做為目標使用。
以下是建立自訂目標類型並在推送管道中使用的流程概要:
建立
CustomTargetType定義,其中包含參照容器的工作,並指定要在容器上執行的指令。使用
customTarget屬性定義新目標,識別新的自訂目標類型。建立版本。
本文件其餘部分會詳細說明每個步驟。
建立容器化應用程式
部署至自訂目標的功能定義於容器化應用程式中,您會在 CustomTargetType 定義中提供給 Cloud Deploy。如果發布管道包含使用自訂目標類型的目標,Cloud Deploy 會呼叫為該自訂目標類型定義的容器,執行您定義的自訂轉譯和部署作業。
應用程式的行為由您決定。不過,它必須使用 Cloud Deploy 提供的輸入環境變數,並傳回必要輸出內容。
在大多數情況下,您會為建立的每個自訂目標類型,分別建立一個自訂算繪和一個自訂部署的容器。自訂算繪器為選用項目,但除非自訂目標使用內建算繪器算繪時可正常運作,否則您必須建立自訂算繪器。根據預設,Cloud Deploy 會使用 skaffold render 算繪資訊清單。
定義自訂目標類型
如要定義自訂目標,請先使用 CustomTargetType 設定建立自訂目標類型。您可以在與傳送管道定義相同的檔案中建立 CustomTargetType,也可以使用目標定義或在個別檔案中建立。
CustomTargetType 的定義如下:
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
name: [CUSTOM_TARGET_TYPE_NAME]
annotations:
labels:
description:
tasks:
render: [RENDER_TASK]
deploy: [DEPLOY_TASK]
地點
CUSTOM_TARGET_TYPE_NAME這是您為這個自訂目標類型定義指定的任意名稱。任何使用您定義的自訂目標類型的目標,都會在目標定義中參照這個名稱。
RENDER_TASK這是定義自訂算繪的工作。如未提供,Cloud Deploy 會使用Skaffold 設定中指定的內建算繪器。
DEPLOY_TASK
註冊自訂目標類型
設定 CustomTargetType 後,請執行 gcloud deploy apply 指令,在 Google Cloud 專案中註冊 CustomTargetType 資源:
gcloud deploy apply --file=[FILE] --project=[PROJECT] --region=[REGION]
其中:
FILE 是您定義這個自訂目標類型的檔案名稱。
PROJECT 是要建立這項資源的 Google Cloud 專案。
CustomTargetType 必須與參照該 Target 資源的專案位於相同專案。如果您已將專案設為 Google Cloud CLI 的預設專案,則不需要指定專案。
REGION 是要建立這個資源的區域 (例如 us-central1)。CustomTargetType 必須與參照該資源的 Target 位於相同區域。如果已將區域設為 gcloud CLI 的預設區域,則不需要指定區域。
CustomTargetType 現在已建立為 Cloud Deploy 資源,您可以在 Target 定義中使用該資源,建立自訂目標。
如要進一步瞭解 CustomTargetType 定義,請參閱 Cloud Deploy 設定結構定義參考資料。
定義目標
支援目標類型的目標定義與自訂目標定義的唯一差異,在於自訂目標定義包含 customTarget 節。customTarget 的語法如下:
customTarget:
customTargetType: [CUSTOM_TARGET_TYPE_NAME]
其中 CUSTOM_TARGET_TYPE_NAME 是在自訂目標類型設定中定義的 name 屬性值。
將目標新增至推送管道
您可以在推送管道中使用自訂目標,就像使用支援的目標類型一樣。也就是說,支援的目標類型和自訂目標在放送管道的進度上沒有差異。
放送管道中的所有目標都必須使用相同的目標類型。舉例來說,您無法建立推送 pipeline,讓部分目標部署至 Google Kubernetes Engine,部分目標則部署至自訂目標。
與支援的目標類型相同,您可以在管道階段中加入部署參數。
建立發布版本
自訂目標類型定義完成,且已建立要使用該類型的目標後,您現在可以照常建立版本:
gcloud deploy releases create [RELEASE_NAME] \
--project=[PROJECT_NAME]