אימות ההגדרות

במדריך הזה נסביר איך לאמת הגדרות באמצעות Cloud Build כשמשתמשים באשכולות Google Kubernetes Engine. אותה הגדרה פועלת בכל מערכת CI/CD מבוססת-מאגר, כמו CircleCI, עם שינויים מינימליים.

מומלץ לאמת את כל שינויי ההגדרות בצינור CI/CD, בנוסף לבדיקת התקינות של ההגדרות באמצעות הפעלת הפקודה nomos vet.

מטרות

  • יוצרים קובץ תצורה של Cloud Build שמורה ל-סנכרון תצורות להשתמש ב-nomos vet בהגדרות במאגר.
  • יוצרים טריגר לפיתוח גרסת Build של Cloud Build כדי שההגדרות ייבדקו בכל פעם שיש שינוי בענף הפיתוח.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. ליצור אשכול 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

המסוף

  1. פותחים את הדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  2. בעמודה member (חבר), מוצאים את השורה עם חשבון השירות של Cloud Build:

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. בשורה הזו, לוחצים על Edit principal.

  4. לוחצים על הוספת תפקיד נוסף.

  5. ברשימה 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 שמייצג את הרמה העליונה של המאגר לסנכרון

ההגדרה הזו כוללת שלושה שלבים:

  1. מריצים את הפקודה kubectl config current-context כדי ליצור את קובץ ה-kubeconfig שנדרש לאימות לאשכול GKE‏ my-cluster. משתמש Root יוצר את הקובץ הזה עם הרשאות מוגבלות.
  2. מריצים את הפקודה chmod 444 /kube/config כדי שהקובץ יהיה קריא בשלב הבא.
  3. מריצים את nomos vet במאגר Git שמשוכפל אוטומטית ב-/workspace. אם משתמשים במאגר לא מובנה, מריצים את הפקודה nomos vet --source-format=unstructured במקום זאת.

יצירת טריגר לפיתוח גרסת Build

בדוגמה הבאה נוצר טריגר שמופעל לכל קומיט בענף הראשי של מאגר Cloud Source Repositories.

  1. פותחים את הדף Triggers (טריגרים) במסוף Google Cloud .

    כניסה לדף triggers

  2. לוחצים על קישור מאגר.

  3. בוחרים באפשרות GitHub (משוקף) ולוחצים על המשך.

  4. בוחרים את המאגר ולוחצים על Connect repository (קישור המאגר).

  5. לוחצים על הוספת טריגר.

  6. מזינים או בוחרים את הערך המתאים בכל שדה שמתואר בטבלה הבאה:

    שדה הערך
    אירוע העלאה לענף
    ענף ^master$
    הגדרות אישיות קובץ תצורת build של Cloud Build‏ (yaml או json)
    המיקום של קובץ ההגדרות של Cloud Build ‫/ cloudbuild.yaml
  7. לוחצים על יצירה כדי לשמור את טריגר לפיתוח גרסת Build.

בדיקת טריגר לפיתוח גרסת Build

כדי לבדוק את ההגדרה באופן ידני, מפעילים את הטריגר:

  1. פותחים את הדף Triggers (טריגרים) במסוף Google Cloud .

    כניסה לדף triggers

  2. מוצאים את הטריגר שיצרתם ולוחצים על Run trigger (הפעלת הטריגר).

    מופיעה ההודעה 'Build started on master branch' (הגרסה התחילה להיבנות בענף הראשי).

  3. לוחצים על הצגה.

    אם ההגדרה נכונה, השלבים של 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

מחיקת משאבים בודדים

כדי למחוק את המשאבים הספציפיים, פועלים לפי השלבים הבאים:

  1. מוחקים את קובץ ההגדרות של Cloud Build.
  2. מוחקים את הטריגר של Cloud Build שיצרתם.
  3. מוחקים את האשכול שבו השתמשתם במדריך הזה.

המאמרים הבאים