1. מטרות
במדריך הזה תלמדו ליצור שלושה אשכולות GKE בשמות preview, canary ו-prod. לאחר מכן תלמדו ליצור יעד של Cloud Deploy לכל אחד מהאשכולות וצינור עיבוד נתונים של Cloud Deploy שיגדיר את רצף השלבים לביצוע הפריסה ביעדים האלה.
תהליך הפריסה יופעל על ידי צינור עיבוד נתונים של cloudbuild שיוצר גרסה של Cloud Deploy ויבצע את הפריסה באשכול התצוגה המקדימה. אחרי שתבדקו שהפריסה בתצוגה המקדימה בוצעה בהצלחה ופועלת כצפוי, תצטרכו לקדם את הגרסה באופן ידני באשכול הניסוי. כדי לקדם את הגרסה בסביבת הייצור, תצטרכו לאשר את צינור עיבוד הנתונים בסביבת הייצור בממשק המשתמש של Cloud Deploy, ולבסוף לקדם אותו.
המטרות של המדריך הזה מחולקות לשלבים הבאים:
- הכנת סביבת העבודה
- הגדרת יעדים ב-Cloud Deploy
- הגדרת צינור עיבוד נתונים ב-Cloud Deploy
- יצירת גרסה
- שדרוג של פריסה
- אישור גרסה לסביבת הייצור
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט. זוהי מחרוזת תווים שלא משמשת את Google APIs, ואפשר לעדכן אותה בכל שלב.
- מזהה הפרויקט צריך להיות ייחודי בכל הפרויקטים ב-Google Cloud, ואי אפשר לשנות אותו אחרי שמגדירים אותו. מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי. בדרך כלל לא משנה מה המחרוזת הזו. ברוב סדנאות ה-Codelab תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מזוהה בתור
PROJECT_ID
), כך שאם המזהה לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר או לנסות ליצור מזהה משלכם ולבדוק אם הוא זמין. לאחר מכן, הוא 'מקפיא' אחרי יצירת הפרויקט. - יש ערך שלישי, מספר פרויקט, שמשתמשים בו בממשקי API מסוימים. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי העזרה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או ב-API של Cloud. השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. כדי להשבית את המשאבים כדי שלא תחויבו אחרי סיום המדריך, פועלים לפי ההוראות ל'ניקוי' שמופיעות בסוף הקודלאב. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
2. הגדרת הפלטפורמה
הכנת סביבת העבודה
כאן נגדיר את הסביבה שנדרשת כדי להריץ את המדריך הזה. בסיום השלב הזה, נוצר אשכול GKE שבו נוכל להריץ את הפריסות.
- הגדרת ברירות מחדל של הגדרות gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- שכפול של מאגר
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- הגדרה של משתני סביבה
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- הפעלת ממשקי API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- יצירת אשכולות GKE
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
הגדרת יעדים ב-Cloud Deploy
- יוצרים קובץ בשם preview.yaml בתיקיית הפריסה באמצעות הפקודה הבאה ב-cloudshell:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- יוצרים קובץ בשם canary.yaml בתיקיית הפריסה באמצעות הפקודה הבאה ב-Cloud Shell:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- יוצרים קובץ בשם prod.yaml בתיקיית הפריסה באמצעות הפקודה הבאה ב-cloudshell:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
שימו לב שהתג requireApproval מוגדר כ-true. המצב הזה לא יאפשר קידום ליעדים מסוג 'ייצור' עד לקבלת האישור. כדי לאשר פרסום, צריך את התפקיד roles/clouddeploy.approver.
- יצירת יעדי הפריסה
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3. יצירת אפליקציה
כחלק מהיצירה של אפליקציה חדשה, צינור עיבוד הנתונים של CICD מוגדר בדרך כלל לביצוע גרסאות build אוטומטיות, בדיקות שילוב ופריסות. השלבים הבאים נחשבים לחלק מתהליך ההגדרה של אפליקציה חדשה. לכל אפליקציה חדשה תהיה צינור עיבוד נתונים לפריסה.
הגדרת צינור עיבוד נתונים ב-Cloud Deploy
- יוצרים קובץ בשם pipeline.yaml בתיקיית הפריסה באמצעות הפקודה הבאה ב-Cloud Shell:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
התג serialPipeline
מכיל תג בשם stages, שהוא רשימה של כל היעדים שאליהם צינור עיבוד הנתונים לפריסה מוגדר לפרוס.
השדה targetId
מזהה את היעד הספציפי שרוצים להשתמש בו בשלב הזה של צינור עיבוד הנתונים להעברה. הערך הוא המאפיין metadata.name מהגדרת היעד.
profiles
היא רשימה של אפס או יותר שמות של פרופילים של Skaffold, מ-skaffold.yaml. Cloud Deploy משתמש בפרופיל עם עיבוד של skaffold כשיוצרים את הגרסה.
- החלת צינור עיבוד נתונים
gcloud beta deploy apply --file deploy/pipeline.yaml
4. שלב הפיתוח
במהלך הפיתוח של האפליקציות, כלי toolchain אוטומטיים של CICD ייצרו וישמרו נכסים. הפקודות הבאות מאפשרות ליצור את האפליקציה באמצעות skaffold ולאחסן נכסים לפריסה באמצעות Cloud Deploy. תהליך ה-CI/CD יבצע את השלב הזה לכל גרסה של האפליקציה.
- פיתוח האפליקציה ושמירתה באמצעות skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. שלב ההשקה
בסיום תהליך ה-CI/CD, בדרך כלל כשהקוד מתויג לצורכי ייצור, מפעילים את תהליך השחרור באמצעות הפקודה cloud deploy release
. לאחר מכן, אחרי שהפריסה תאומת ותאושר, תוכלו להעביר את הגרסה הסופית לסביבות היעד השונות על ידי קידום הפעולה ואישורה באמצעות תהליכים אוטומטיים או אישורים ידניים.
יצירת גרסה
קודם לכן במדריך הזה יצרנו קבצים של Cloud Deploy כדי להבין איך Cloud Deploy פועל. לצורך הדגמה, יצרנו את אותם קובצי Cloud Deploy והעברנו אותם למאגר ב-GitHub עם אפליקציית Go לדוגמה. נשתמש ב-Cloud Deploy כדי להשיק את האפליקציה הזו.
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
בדיקת הגרסה
כשיוצרים גרסה של Cloud Deploy, היא מושקת באופן אוטומטי ביעד הראשון, שהוא תצוגה מקדימה.
- עוברים אל <Cloud Deploy> במסוף Google Cloud
- לוחצים על 'sample-app'.
במסך הזה יוצג ייצוג גרפי של צינור עיבוד הנתונים.
- מוודאים שמוצג קו מתאר ירוק בצד ימין של תיבת התצוגה המקדימה, שמציין שהגרסה הוטמעה בסביבה הזו.
- אפשר ללחוץ על שם הגרסה בקטע 'פרטי הגרסה' שבחלק התחתון של המסך כדי לראות פרטים נוספים על הגרסה.
- כדי לוודא שהאפליקציה נפרסה בהצלחה, מריצים את הפקודה הבאה ב-Cloud Shell:
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- לוחצים על סמל התצוגה המקדימה באתר בפינה הימנית העליונה של המסך.
- בוחרים באפשרות 'תצוגה מקדימה ביציאה 8080'.
תועברו לדף חדש שבו תוצג ההודעה 'Hello World!'
- משתמשים ב-
ctrl+c
בטרמינל כדי לסיים את העברת היציאה.
קידום גרסה
עכשיו, אחרי שהגרסה החדשה נפרסת ביעד הראשון (תצוגה מקדימה) בצינור עיבוד הנתונים, אפשר לקדם אותה ליעד הבא (גרסת קנרי). מריצים את הפקודה הבאה כדי להתחיל את התהליך.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
בדיקת קידום המכירות של הגרסה
- נכנסים לצינור עיבוד הנתונים sample-app במסוף Google Cloud
- מוודאים שמוצג קו מתאר ירוק בצד ימין של התיבה של Canary, שמציין שהגרסה הזו נפרסת בסביבה הזו.
- יצירת מנהרה לאפליקציה כדי לוודא שהיא פרוסה בצורה תקינה
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- לוחצים על סמל התצוגה המקדימה באתר בפינה הימנית העליונה של המסך.
- בוחרים באפשרות 'תצוגה מקדימה ביציאה 8080'.
תועברו לדף חדש שבו תוצג ההודעה 'Hello World!'
- משתמשים ב-
ctrl+c
בטרמינל כדי לסיים את העברת היציאה.
אישור גרסה לסביבת הייצור
חשוב לזכור שכאשר יצרנו את היעד prod באמצעות קובץ prod.yaml, צייינו את התג requireApproval כ-true. הפעולה הזו תחייב אישור כדי להפעיל את קידום המכירות בסביבת הייצור.
- מעבירים את הגרסה ל-canary לייצור באמצעות הפקודה הבאה:
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- נכנסים לצינור עיבוד הנתונים sample-app במסוף Google Cloud
- שימו לב לסמן הצהוב עם הכיתוב '1 בהמתנה'.
ההודעה הזו מציינת שיש גרסה חדשה בתור לפריסה בסביבת הייצור, אבל היא עדיין צריכה לעבור בדיקה ואישור.
- לוחצים על הלחצן 'בדיקה' שמתחת להודעה הצהובה.
- במסך הבא, לוחצים שוב על 'בדיקה' כדי לגשת למסך האישור לצורכי ייצור.
- אפשר גם לבדוק את השינויים ב-Manifest Diff. במקרה הזה, קובץ חדש לגמרי.
- לוחצים על הלחצן 'אישור'.
- חוזרים אל דף צינור עיבוד הנתונים של אפליקציית הדוגמה, שבו תוכלו לראות את ההתקדמות של השקת הגרסה בסביבת הייצור.
בדיקת הגרסה לסביבת הייצור
בדומה לסביבות האחרות, אפשר לבדוק את הפריסה בסיום התהליך לפי השלבים הבאים.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי ליצור את הניתוב (port-forward):
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- לוחצים על סמל התצוגה המקדימה באתר בפינה הימנית העליונה של המסך.
- בוחרים באפשרות 'תצוגה מקדימה ביציאה 8080'.
תועברו לדף חדש שבו תוצג ההודעה 'Hello World!'
- משתמשים ב-
ctrl+c
בטרמינל כדי לסיים את העברת היציאה.