1. מטרות
במדריך הזה תיצרו שלושה אשכולות GKE שנקראים Preview (תצוגה מקדימה), Canary ו-prod. לאחר מכן, תיצרו יעד של Cloud Deploy שתואם לכל אשכול וצינור עיבוד נתונים של Cloud Deploy שיגדיר את רצף השלבים לביצוע הפריסה ביעדים האלה.
תהליך הפריסה יופעל על ידי צינור עיבוד נתונים של Cloudbuild שייצור גרסה של Cloud Deploy ויבצע את הפריסה באשכול התצוגה המקדימה. אחרי שמוודאים שהפריסה בתצוגה המקדימה הייתה מוצלחת ופועלת כמצופה, תקדמו באופן ידני את הגרסה באשכול הקנוני. קידום הגרסה באשכול הייצור יחייב אישור. תצטרכו לאשר את צינור עיבוד הנתונים של prod בממשק המשתמש של Cloud Deploy ולבסוף לקדם אותו.
אפשר לפצל את המטרות של המדריך הזה לשלבים הבאים:
- הכנת סביבת העבודה
- הגדרת יעדים ב-Cloud Deploy
- הגדרת צינור עיבוד נתונים של Cloud Deploy
- יצירת גרסה
- קידום פריסה
- אישור גרסה לסביבת ייצור
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID
), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט. - יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות למחיקת המשאבים. בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
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
- יוצרים קובץ בספריית הפריסה בשם 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 באמצעות הפקודה הבאה ב-cloudshell:
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
חשוב לשים לב שהתג שדורש אישור מוגדר כ-True. לא ניתן לקדם את המוצר ליעד המוצר עד שהאישור יאושר. כדי לאשר גרסה צריך תפקידים/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
- יוצרים קובץ בספריית הפריסה בשם צינור עיבוד נתונים.yaml עם הפקודה הבאה ב-cloudshell:
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
מכיל תג בשם שלבים, שהוא רשימה של כל היעדים שבהם הוגדר צינור עיבוד הנתונים הזה לפריסה.
targetId
מזהה את היעד הספציפי לשימוש בשלב הזה של צינור עיבוד הנתונים להעברת נתונים. הערך הוא המאפיין metadata.name מהגדרת היעד.
profiles
הוא רשימה של אפס שמות של פרופילים ב-Skaffold, מ-skaffold.yaml. ב-Cloud Deploy, המערכת משתמשת בפרופיל עם skaffold במהלך יצירת הגרסה.
- הפעלת צינור עיבוד נתונים
gcloud beta deploy apply --file deploy/pipeline.yaml
4. שלב הפיתוח
במהלך הפיתוח של האפליקציות, צרור הכלים האוטומטיים של CICD ייצור ויאחסן נכסים. הפקודות הבאות מבוצעות כדי לפתח את האפליקציה באמצעות skaffold ואחסון נכסים לצורך פריסה עם Cloud Deploy. השלב הזה יתבצע בתהליך ה-CICD בכל גרסת build של אפליקציה.
- פיתוח ואחסון של אפליקציות באמצעות skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. שלב הפצה
בסוף תהליך ה-CICD, בדרך כלל כשהקוד מתויג לסביבת הייצור, מתחילים את תהליך ההפצה על ידי קריאה לפקודה 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
- לוחצים על 'אפליקציה לדוגמה'
במסך הזה תראו ייצוג גרפי של צינור עיבוד הנתונים.
- מוודאים שמופיע מסגרת ירוקה בצד שמאל של תיבת התצוגה המקדימה, שמשמעותה היא שהגרסה נפרסה בסביבה הזו.
- אפשר ללחוץ על שם הגרסה בקטע 'פרטי הגרסה' בקטע התחתון של המסך כדי לבדוק פרטים נוספים על פריט התוכן
- צריך לוודא שהגרסה פרסה את האפליקציה בהצלחה. צריך להריץ את הפקודה הבאה שהיא חוסמת
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
בדיקת המבצע על ההשקה
- נכנסים אל צינור עיבוד הנתונים של האפליקציה לדוגמה במסוף 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, הגדרנו את התג requiredApproval כ-true. פעולה זו תאלץ דרישה לקבל אישור לקידום במוצר.
- קידום הגרסה הקנרית לסביבת ייצור באמצעות הפקודה הבאה
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- נכנסים אל צינור עיבוד הנתונים של האפליקציה לדוגמה במסוף Google Cloud.
- שימו לב לאינדיקטור הצהוב עם הכיתוב '1 בהמתנה'.
ההודעה הזו מציינת שיש גרסה שממתינה לתור לפריסה לסביבת הייצור, אבל נדרשת בדיקה ואישור.
- לוחצים על 'בדיקה'. הלחצן שממוקם מתחת להודעה הצהובה.
- במסך הבא, לוחצים על 'בדיקה' שוב כדי לגשת למסך האישור לסביבת הייצור
- אפשר גם לבדוק את השינויים במניפסט. במקרה הזה, קובץ חדש לגמרי.
- לוחצים על 'אישור'. לחצן
- חוזרים אל דף צינור עיבוד הנתונים של האפליקציה לדוגמה, שבו תוכלו לראות את הגרסה לביצוע ההפקה.
בדיקת הגרסה לסביבת הייצור
כמו בסביבות אחרות, תוכלו לבדוק את הפריסה בסיום התהליך לפי השלבים שבהמשך.
- מריצים את הפקודה הבאה ב-cloudshell כדי ליצור את ההמרה להעברה קדימה
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
בטרמינל.