במדריך הזה נסביר איך לאמת הגדרות באמצעות Cloud Build כשמשתמשים באשכולות Google Kubernetes Engine. אותה הגדרה פועלת בכל מערכת CI/CD מבוססת-מאגר, כמו CircleCI, עם שינויים מינימליים.
מומלץ לאמת את כל שינויי ההגדרות בצינור CI/CD, בנוסף לבדיקת התקינות של ההגדרות באמצעות הפעלת הפקודה nomos vet.
מטרות
- יוצרים קובץ תצורה של Cloud Build שמורה ל-סנכרון תצורות להשתמש ב-
nomos vetבהגדרות במאגר. - יוצרים טריגר לפיתוח גרסת Build של Cloud Build כדי שההגדרות ייבדקו בכל פעם שיש שינוי בענף הפיתוח.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.- ליצור אשכול GKE או לקבל גישה לאשכול כזה שעומד בדרישות של סנכרון תצורות. פרטים על יצירת אשכול כזה מופיעים במאמר תחילת העבודה עם סנכרון תצורות.
מתן הרשאה לחשבון השירות ב-Cloud Build
נותנים לחשבון השירות ב-Cloud Build הרשאה לגשת לאשכול GKE.
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
המסוף
פותחים את הדף IAM במסוף Google Cloud .
בעמודה member (חבר), מוצאים את השורה עם חשבון השירות של Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.comבשורה הזו, לוחצים על Edit principal.
לוחצים על הוספת תפקיד נוסף.
ברשימה Select a role, בוחרים באפשרות
Kubernetes Engine Developerולוחצים על Save.
יצירת הגדרות של Cloud Build
יוצרים קובץ Cloud Build config ומאחסנים אותו בספריית השורש של המאגר שמכיל את קובצי ההגדרות (לדוגמה, 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 שמייצג את הרמה העליונה של המאגר לסנכרון
ההגדרה הזו כוללת שלושה שלבים:
- מריצים את הפקודה
kubectl config current-contextכדי ליצור את קובץ ה-kubeconfig שנדרש לאימות לאשכול GKEmy-cluster. משתמש Root יוצר את הקובץ הזה עם הרשאות מוגבלות. - מריצים את הפקודה
chmod 444 /kube/configכדי שהקובץ יהיה קריא בשלב הבא. - מריצים את
nomos vetבמאגר Git שמשוכפל אוטומטית ב-/workspace. אם משתמשים במאגר לא מובנה, מריצים את הפקודהnomos vet --source-format=unstructuredבמקום זאת.
יצירת טריגר לפיתוח גרסת Build
בדוגמה הבאה נוצר טריגר שמופעל לכל קומיט בענף הראשי של מאגר Cloud Source Repositories.
פותחים את הדף Triggers (טריגרים) במסוף Google Cloud .
לוחצים על קישור מאגר.
בוחרים באפשרות GitHub (משוקף) ולוחצים על המשך.
בוחרים את המאגר ולוחצים על Connect repository (קישור המאגר).
לוחצים על הוספת טריגר.
מזינים או בוחרים את הערך המתאים בכל שדה שמתואר בטבלה הבאה:
שדה הערך אירוע העלאה לענף ענף ^master$ הגדרות אישיות קובץ תצורת build של Cloud Build (yaml או json) המיקום של קובץ ההגדרות של Cloud Build / cloudbuild.yaml לוחצים על יצירה כדי לשמור את טריגר לפיתוח גרסת Build.
בדיקת טריגר לפיתוח גרסת Build
כדי לבדוק את ההגדרה באופן ידני, מפעילים את הטריגר:
פותחים את הדף Triggers (טריגרים) במסוף Google Cloud .
מוצאים את הטריגר שיצרתם ולוחצים על Run trigger (הפעלת הטריגר).
מופיעה ההודעה 'Build started on master branch' (הגרסה התחילה להיבנות בענף הראשי).
לוחצים על הצגה.
אם ההגדרה נכונה, השלבים של Cloud Build מופיעים בירוק.
הגדרות Cloud Build לא תקינות
טריגר לא יכול לפעול אם קובץ תצורת ה-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
אם מפעילים שוב את הטריגר באופן ידני, מקבלים את הודעת השגיאה הבאה
כי התו path: בשורה 6 לא מוזח בצורה נכונה:
Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.
כדי לתקן את ההגדרה הזו, צריך להוסיף כניסה ל-path: בשורה 6, כך שהיא תהיה באותה רמה כמו name: בשורה 5. מידע נוסף על המבנה של קובץ הגדרות של Cloud Build זמין במאמר יצירת קובץ הגדרות בסיסי של Cloud Build.
הסרת המשאבים
מחיקת הפרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת משאבים בודדים
כדי למחוק את המשאבים הספציפיים, פועלים לפי השלבים הבאים:
- מוחקים את קובץ ההגדרות של Cloud Build.
- מוחקים את הטריגר של Cloud Build שיצרתם.
- מוחקים את האשכול שבו השתמשתם במדריך הזה.
המאמרים הבאים
- מידע נוסף על Cloud Build
- הפסקה זמנית של סנכרון ההגדרות