本教學課程說明如何使用 Google Kubernetes Engine (GKE) Enterprise 版叢集時,透過 Cloud Build 驗證設定。只要稍做修改,相同的設定就能在任何其他以容器為基礎的 CI/CD 系統 (例如 CircleCI) 中運作。
除了執行 nomos vet
指令檢查設定的有效性,我們也建議您在 CI/CD 管道中驗證所有設定變更。
目標
- 建立 Cloud Build 設定檔,指示 Config Sync 在存放區的設定中使用
nomos vet
。 - 建立 Cloud Build 觸發條件,以便在開發分支版本有變更時檢查設定。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
- Config Sync (part of GKE Enterprise)
- Cloud Build
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- 建立或存取符合 Config Sync 需求的 GKE Enterprise 叢集。如要瞭解如何建立這類叢集,請參閱「開始使用 Config Sync」。
在 Google Cloud 主控台中開啟「IAM」頁面。
在「成員」欄中,找出含有 Cloud Build 服務帳戶的資料列:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
在該資料列中,按一下
「Edit principal」(編輯主體)。按一下 [Add another role] (新增其他角色)。
在「Select a role」(選擇角色) 清單中,選取
Kubernetes Engine Developer
,然後按一下「Save」(儲存)。ZONE
:叢集執行的可用區CLUSTER_NAME
:叢集名稱POLICY_DIR
:Git 存放區中的路徑,代表要同步處理的存放區頂層- 執行
kubectl config current-context
,產生向my-cluster
GKE 叢集進行驗證所需的 kubeconfig 檔案。根使用者會產生這個檔案,但權限受限。 - 執行
chmod 444 /kube/config
,讓這個檔案可在下一個步驟中讀取。 - 在 Git 存放區上執行
nomos vet
,該存放區會自動複製到/workspace
。如果您是使用非結構化存放區,請改為執行nomos vet --source-format=unstructured
。 在 Google Cloud 控制台中開啟「觸發條件」頁面。
按一下 [Connect repository] (連結存放區)。
選取「GitHub (已鏡像)」,然後按一下「繼續」。
選取存放區,然後按一下「連結存放區」。
按一下 [Add trigger] (新增觸發條件)。
在下表所述的每個欄位中,輸入或選取對應項目:
欄位 項目 事件 推送至分支版本 分支版本 ^master$ 設定 Cloud Build 設定檔 (YAML 或 JSON) Cloud Build 設定檔位置 / cloudbuild.yaml 按一下「建立」即可儲存建構觸發條件。
在 Google Cloud 控制台中開啟「觸發條件」頁面。
找出您建立的觸發條件,然後按一下「執行觸發條件」。
系統會顯示「Build started on master branch」(已在主要分支啟動建構作業) 訊息。
按一下「顯示」。
如果設定正確,Cloud Build 步驟會顯示為綠色。
- 刪除 Cloud Build 設定檔。
- 刪除您建立的 Cloud Build 觸發條件。
- 刪除您在本教學課程中使用的叢集。
授予 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
控制台
建立 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
更改下列內容:
這項設定分為三個步驟:
建立版本觸發條件
以下範例會建立觸發條件,針對提交至 Cloud Source Repositories 存放區 master 分支版本的每個修訂內容執行作業。
測試建構作業觸發條件
手動執行觸發條件,測試設定:
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
刪除個別資源
如要刪除個別資源,請完成下列步驟: