驗證設定

本教學課程說明如何使用 Google Kubernetes Engine (GKE) Enterprise 版叢集時,透過 Cloud Build 驗證設定。只要稍做修改,相同的設定就能在任何其他以容器為基礎的 CI/CD 系統 (例如 CircleCI) 中運作。

除了執行 nomos vet 指令檢查設定的有效性,我們也建議您在 CI/CD 管道中驗證所有設定變更。

目標

  • 建立 Cloud Build 設定檔,指示 Config Sync 在存放區的設定中使用 nomos vet
  • 建立 Cloud Build 觸發條件,以便在開發分支版本有變更時檢查設定。

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

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

  4. Enable the Cloud Build API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Build API.

    Enable the API

  8. 建立或存取符合 Config Sync 需求的 GKE Enterprise 叢集。如要瞭解如何建立這類叢集,請參閱「開始使用 Config Sync」。
  9. 授予 Cloud Build 服務帳戶權限

    授予 Cloud Build 服務帳戶存取 GKE Enterprise 叢集的權限。

    gcloud

    如要將 Kubernetes Engine Developer 角色新增至 Cloud Build 服務帳戶,請執行下列指令:

    PROJECT_ID=$(gcloud config get-value project)
    PROJECT_NUM=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUM@cloudbuild.gserviceaccount.com \
        --role=roles/container.developer
    

    控制台

    1. 在 Google Cloud 主控台中開啟「IAM」頁面。

      前往「IAM」頁面

    2. 在「成員」欄中,找出含有 Cloud Build 服務帳戶的資料列:

      PROJECT_NUMBER@cloudbuild.gserviceaccount.com
      
    3. 在該資料列中,按一下 「Edit principal」(編輯主體)

    4. 按一下 [Add another role] (新增其他角色)

    5. 在「Select a role」(選擇角色) 清單中,選取 Kubernetes Engine Developer,然後按一下「Save」(儲存)

    建立 Cloud Build 設定

    建立 Cloud Build 設定檔,並儲存在包含設定檔的存放區根目錄中 (例如 my-repo/cloudbuild.yaml)。

    steps:
    - name: 'gcr.io/cloud-builders/kubectl'
      args: ['config', 'current-context']
      volumes:
      - name: 'kube'
        path: '/kube'
      env:
      - 'KUBECONFIG=/kube/config'
      - 'CLOUDSDK_COMPUTE_ZONE=ZONE'
      - 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
      - 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
    - name: 'bash'
      args: ['chmod', '444', '/kube/config']
      volumes:
      - name: 'kube'
        path: '/kube'
    - name: 'gcr.io/config-management-release/nomos:stable'
      args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
      volumes:
      - name: 'kube'
        path: '/kube'
      env:
      - 'KUBECONFIG=/kube/config'
      timeout: 30s
    

    更改下列內容:

    • ZONE:叢集執行的可用區
    • CLUSTER_NAME:叢集名稱
    • POLICY_DIR:Git 存放區中的路徑,代表要同步處理的存放區頂層

    這項設定分為三個步驟:

    1. 執行 kubectl config current-context,產生向 my-cluster GKE 叢集進行驗證所需的 kubeconfig 檔案。根使用者會產生這個檔案,但權限受限。
    2. 執行 chmod 444 /kube/config,讓這個檔案可在下一個步驟中讀取。
    3. 在 Git 存放區上執行 nomos vet,該存放區會自動複製到 /workspace。如果您是使用非結構化存放區,請改為執行 nomos vet --source-format=unstructured

    建立版本觸發條件

    以下範例會建立觸發條件,針對提交至 Cloud Source Repositories 存放區 master 分支版本的每個修訂內容執行作業。

    1. 在 Google Cloud 控制台中開啟「觸發條件」頁面。

      前往「觸發條件」頁面

    2. 按一下 [Connect repository] (連結存放區)

    3. 選取「GitHub (已鏡像)」,然後按一下「繼續」

    4. 選取存放區,然後按一下「連結存放區」

    5. 按一下 [Add trigger] (新增觸發條件)。

    6. 在下表所述的每個欄位中,輸入或選取對應項目:

      欄位 項目
      事件 推送至分支版本
      分支版本 ^master$
      設定 Cloud Build 設定檔 (YAML 或 JSON)
      Cloud Build 設定檔位置 / cloudbuild.yaml
    7. 按一下「建立」即可儲存建構觸發條件。

    測試建構作業觸發條件

    手動執行觸發條件,測試設定:

    1. 在 Google Cloud 控制台中開啟「觸發條件」頁面。

      前往「觸發條件」頁面

    2. 找出您建立的觸發條件,然後按一下「執行觸發條件」

      系統會顯示「Build started on master branch」(已在主要分支啟動建構作業) 訊息。

    3. 按一下「顯示」

      如果設定正確,Cloud Build 步驟會顯示為綠色。

    Cloud Build 設定無效

    如果 Cloud Build 設定檔無效,觸發條件就無法執行。

    如要測試這項功能,請使用下列檔案更新存放區中的 Cloud Build 設定。請注意第 6 行的縮排無效:

    steps:
    - name: 'gcr.io/cloud-builders/kubectl'
      args: ['config', 'current-context']
      volumes:
      - name: 'kube'
      path: '/kube'
      env:
      - 'KUBECONFIG=/kube/config'
      - 'CLOUDSDK_COMPUTE_ZONE=ZONE'
      - 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
      - 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
    - name: 'bash'
      args: ['chmod', '444', '/kube/config']
      volumes:
      - name: 'kube'
        path: '/kube'
    - name: 'gcr.io/nomos-release/nomos:stable'
      args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
      volumes:
      - name: 'kube'
        path: '/kube'
      env:
      - 'KUBECONFIG=/kube/config'
      timeout: 30s
    

    如果您再次手動執行觸發程序,會收到以下錯誤訊息,因為第 6 行的 path: 未正確縮排:

    Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
    unknown field "path" in cloudbuild_go_proto.BuildStep.
    

    如要修正這項設定,請將第 6 行的 path: 縮排至與第 5 行的 name: 相同層級。如要進一步瞭解 Cloud Build 設定檔的結構,請參閱建立基本 Cloud Build 設定

    清除所用資源

    刪除專案

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    刪除個別資源

    如要刪除個別資源,請完成下列步驟:

    1. 刪除 Cloud Build 設定檔。
    2. 刪除您建立的 Cloud Build 觸發條件
    3. 刪除您在本教學課程中使用的叢集

    後續步驟