建立自訂目標

本文說明如何建立自訂 Cloud Deploy 目標類型,並在 Cloud Deploy 提交管道中使用該自訂目標類型做為目標

以下是建立自訂目標類型並在提交管道中使用自訂目標類型的大致程序:

  1. 建立容器化應用程式或應用程式,其中包含可部署至自訂目標的功能,並符合 Cloud Deploy 自訂目標類型的規定

  2. skaffold.yaml定義自訂動作,以便參照該容器並指定要在此執行的指令。

  3. 建立 CustomTargetType 定義,參照上一個步驟中的自訂動作,並將其註冊為 Cloud Deploy 資源。

  4. 使用 customTarget 屬性定義新目標,以識別新的自訂目標類型。

  5. 從放送管道進度參照該目標

  6. 建立版本

本文件的其餘部分會詳細說明每個步驟。

建立容器化應用程式

要部署至自訂目標的功能是在容器化應用程式中定義,您可以透過 skaffold.yaml 檔案參照提供給 Cloud Deploy。如果提交管道包含使用自訂目標類型的目標,Cloud Deploy 會在 Skaffold 中呼叫為該自訂目標類型定義的自訂動作容器,執行您定義的轉譯和部署動作。

您可以自行決定應用程式的行為。不過,它必須使用 Cloud Deploy 提供的輸入環境變數,並且必須傳回必要的輸出內容

在大多數情況下,您會為每個自訂目標類型建立一個轉譯動作容器和一個部署動作容器。算繪動作是選用的,但如果您未提供,Cloud Deploy 會使用預設的 skaffold render

在 Skaffold 中定義自訂動作

自訂動作容器映像檔或映像檔就位後,您就可以從 skaffold.yaml 設定檔參照這些映像檔。

您可以在 customActions 段落中,為自訂目標設定每項自訂動作。針對任何自訂目標類型,您可以在 Skaffold 中建立轉譯動作和部署動作。CustomTargetType 定義會指出要使用哪些自訂動作進行轉譯,以及要使用哪些動作進行部署。

以下是 skaffold.yaml 中自訂轉譯和部署動作的設定:

apiVersion: skaffold/v4beta7
kind: Config
customActions:
# custom render action
- name:
  containers:
  - name:
    image:
    command:
    args:
# custom deploy action
- name:
  containers:
  - name:
    image:
    command:
    args:

在這個 Skaffold 設定中:

  • customActions.name

    是自訂轉譯或部署動作的任意名稱。CustomTargetType 定義會在 renderAction 屬性或 deployAction 屬性中參照這個名稱。

  • containers 節包含參照,以及執行該容器的指令。

    containers 段落允許使用多個容器,但 Google 建議您只使用一個。

  • customActions.containers.name

    是您用於此動作的特定容器任意名稱。最佳做法是,這個容器名稱一律應加上 SHA 限定詞。

  • image

    是容器映像檔的路徑。

  • command

    是在容器中執行的指令。

  • args

    command 的引數集合。

如需 customActions 中使用的設定屬性詳細說明文件,請參閱 Skaffold YAML 參考資料

定義自訂目標類型

您可以使用 CustomTargetType 設定,先建立自訂目標類型,再定義自訂目標。您可以在與提交管道定義相同的檔案中建立 CustomTargetType,也可以使用目標定義,或在個別檔案中建立。

CustomTargetType 定義如下:

# Custom target type config
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
  name: [CUSTOM_TARGET_TYPE_NAME]
  annotations:
  labels:
description:
customActions:
  renderAction: [RENDER_ACTION_NAME]
  deployAction: [DEPLOY_ACTION_NAME]
  includeSkaffoldModules:

地點

  • CUSTOM_TARGET_TYPE_NAME

    是您為這個自訂目標類型定義指定的任意名稱。對於使用您定義的自訂目標類型的任何目標,這個名稱會在目標定義中參照。

  • RENDER_ACTION_NAME

    是自訂轉譯動作的名稱。這個值是 skaffold.yaml 中為 render 動作定義的 customAction.name

  • DEPLOY_ACTION_NAME

    是自訂部署動作的名稱。這個值是 skaffold.yaml 中為 deploy 動作定義的 customAction.name

  • includeSkaffoldModules

    如果您使用遠端 Skaffold 設定,則可使用這個可選的段落。此節中的屬性會顯示在「使用遠端 Skaffold 設定」一節中。

使用遠端 Skaffold 設定

您可以將 Skaffold 設定儲存在公開 Git 存放區、Cloud Storage 值區或 Cloud Build 第 2 代存放區中,並從自訂目標類型定義參照這些設定。

使用遠端 Skaffold 設定,表示您在發布時提供的 skaffold.yaml 不需要定義自訂動作。這樣一來,您就能在貴機構內分享自訂動作。

如何使用遠端 Skaffold 設定:

  1. 使用自訂動作建立 Skaffold 設定。

  2. 將設定儲存在 Git 存放區或 Cloud Storage 值區中。

  3. 在自訂目標類型定義中,新增 customActions.includeSkaffoldModules 節。

  4. includeSkaffoldModules 下方指定下列項目:

    • 一或多個 configs 元素 (選用):

      - configs: ["name1", "name2"]

      configs 的值是字串清單,與要納入的每個 Skaffold 設定檔的 metadata.name 屬性相符。如果省略這項設定,Cloud Deploy 會採用指定路徑中的所有設定。

    • googleCloudStoragegitgoogleCloudBuildRepo 節。

      適用於 Cloud Storage:

      googleCloudStorage:
        source: PATH_TO_GCS_BUCKET
        path: FILENAME
      

      Git:

      git:
        repo: REPO_URL
        path: PATH_TO_FILE
        ref: BRANCH_NAME
      

      適用於 Cloud Build 存放區 (第 2 代):

       googleCloudBuildRepo:
        repository: PATH_TO_GCB_REPO
        path: PATH_TO_FILE
        ref: BRANCH_NAME
      

      其中:

      PATH_TO_GCS_BUCKET 是 Cloud Storage 目錄的路徑,結尾為 /*,用於儲存 Skaffold 設定。Skaffold 會下載這個目錄中的所有檔案,然後根據設定的相對路徑,找出含有設定的相關 Skaffold 檔案。

      PATH_TO_GCB_REPO 是 Cloud Build 第 2 代存放區的路徑,用於儲存 Skaffold 設定。路徑的格式如下:projects/{project}/locations/{location}/connections/{connection}/repositories/{repository}。Skaffold 會下載這個目錄中的所有檔案,然後根據設定的相對路徑尋找 Skaffold 檔案。

      FILENAME 是包含 Skaffold 設定的檔案名稱。這個 path: 屬性是選用的,如果未指定,Cloud Deploy 會假設為 skaffold.yaml。如果沒有 skaffold.yaml,或是指定的檔案名稱不存在,則發布建立作業會失敗。

      REPO_URL 是 Git 存放區的網址。

      PATH_TO_FILE 是該存放區中含有 Skaffold 設定檔的檔案路徑。

      BRANCH_NAME 是分支名稱 (例如 main),用於擷取 Skaffold 設定。

範例

以下自訂目標類型 YAML 是包含 includeSkaffoldModules 段落的 customActions 段落,指向儲存在 Cloud Storage 值區中的 Skaffold 設定:

customActions:
  renderAction: my-custom-action
  deployAction: my-custom-action
  includeSkaffoldModules:
    - configs: ["myConfig"]
      googleCloudStorage:
        source: "gs://my-custom-target-bucket/my-custom/*"
        path: "skaffold.yaml

以下 YAML 是 Skaffold 設定,顯示的自訂動作會參照該設定:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: myConfig
customActions:
  - name: my-custom-action
    containers:
      - name: my-custom-container
        image: us-east1-docker.pkg.dev/abcdefg/foldername/myimage@sha256:c56fcf6e0a7637ddf0df3d56a0dd23bfce03ceca06a6fc527b0e0e7430e6e9f9

註冊自訂目標類型

設定 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-centra1)。CustomTargetType 必須與參照它的 Target 資源位於相同區域。如果您已將區域設為 gcloud CLI 的預設區域,則無須指定區域。

CustomTargetType 已建立為 Cloud Deploy 資源,現在您可以在 Target 定義中使用它來建立自訂目標。

如要進一步瞭解 CustomTargetType 定義,請參閱 Cloud Deploy 設定結構定義參考資料

定義目標

支援目標類型的目標定義和自訂目標定義唯一的差異,在於自訂目標定義包含 customTarget 節。customTarget 的語法如下:

customTarget:
  customTargetType: [CUSTOM_TARGET_TYPE_NAME]

其中 CUSTOM_TARGET_TYPE_NAME自訂目標類型設定中定義的 name 屬性值。

將目標新增至提交管道

您可以在提交管道中使用自訂目標,就像使用支援的目標類型一樣。也就是說,在支援的目標類型和自訂目標之間,放送管道進度沒有差異。

提交管道中的所有目標都必須使用相同的目標類型。舉例來說,您無法建立包含部署至 Google Kubernetes Engine 和部分自訂目標的目標的管道。

如同支援的目標類型,您可以在管道階段加入部署參數

建立版本

自訂目標類型已完全定義,且已建立使用該類型的目標,現在您可以按照一般方式建立版本:

gcloud deploy releases create [RELEASE_NAME] \
  --project=[PROJECT_NAME] \
  --region=[REGION] \
  --delivery-pipeline=[PIPELINE_NAME]

建立版本時,系統會為您在提交管道中各個目標執行自訂轉譯動作,包括處理在版本、目標或提交管道中設定的部署參數。Cloud Deploy 會將部署參數做為輸入,提供給自訂轉譯容器。

查看自訂指定目標的輸出結果

如果自訂動作符合自訂目標的規定,您可以使用 Google Cloud 主控台查看算繪的構件。

請按照下列步驟查看自訂轉譯動作的輸出內容。

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

    開啟「Delivery pipelines」頁面

  2. 按一下推送管道名稱。

    管道示意圖會顯示應用程式的部署狀態,而版本會列在「發布管道詳細資料」下方的「版本」分頁中。

  3. 按一下版本名稱。

    系統會顯示「Release details」(發布詳細資料) 頁面。

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

  5. 在「目標構件」下方,按一下「查看構件」旁的箭頭。

    系統會列出已轉譯的構件,包括由自訂轉譯器產生的已轉譯 skaffold.yaml 和已轉譯資訊清單檔案。您可以按一下每個項目旁邊的「儲存空間位置」連結,前往 Cloud Storage 值區查看這些檔案。

    您也可以點選「View artifacts」連結,使用發布檢查器依據版本、目標或階段查看這些檔案。

後續步驟