השקה באמצעות Cloud Deploy

1. מטרות

במדריך הזה תיצרו שלושה אשכולות GKE בשמות preview, ‏ canary ו-prod. לאחר מכן תיצרו יעד Cloud Deploy שמתאים לכל אשכול, וצינור Cloud Deploy שיגדיר את רצף השלבים לביצוע הפריסה ביעדים האלה.

תהליך הפריסה יופעל על ידי צינור Cloudbuild שייצור מהדורה של Cloud Deploy ויבצע את הפריסה באשכול התצוגה המקדימה. אחרי שמוודאים שהפריסה בתצוגה המקדימה הצליחה ושהיא פועלת כצפוי, מקדמים ידנית את הגרסה באשכול Canary. כדי לקדם את הגרסה באשכול הייצור, צריך אישור. תאשרו את צינור הייצור בממשק המשתמש של Cloud Deploy ותקדמו אותו.

המדריך הזה מחולק לשלבים הבאים:

  • הכנת סביבת העבודה
  • הגדרת יעדים ב-Cloud Deploy
  • הגדרת צינור עיבוד נתונים ב-Cloud Deploy
  • יצירת גרסה
  • קידום פריסה
  • אישור גרסה לסביבת ייצור

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • מזהה הפרויקט חייב להיות ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות ליצור מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
  • יש ערך שלישי, מספר פרויקט, שמשמש חלק מממשקי ה-API. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

2. הגדרת הפלטפורמה

הכנת סביבת העבודה

בשלב הזה נגדיר את הסביבה שנדרשת להרצת המדריך הזה. אחרי השלמת השלב הזה, יהיה לנו אשכול GKE שבו נוכל להריץ את הפריסות.

  1. הגדרת ברירות מחדל של gcloud config

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Clone Repo

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. הגדרה של משתני סביבה

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. הפעלת ממשקי API

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. יצירת אשכולות 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

  1. יוצרים קובץ בספריית הפריסה בשם preview.yaml באמצעות הפקודה הבאה ב-Cloud Shell:

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.
  1. כדי ליצור קובץ בשם 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

  1. יוצרים קובץ בספריית הפריסה בשם prod.yaml באמצעות הפקודה הבאה ב-Cloud Shell:

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.

  1. יצירת יעדי הפריסה
         `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

  1. כדי ליצור קובץ בשם 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 render.

  1. החלת צינור עיבוד נתונים

gcloud beta deploy apply --file deploy/pipeline.yaml

4. שלב הפיתוח

במהלך פיתוח האפליקציות, כלי אוטומטי של CICD ייצור ויאחסן נכסים. הפקודות הבאות מופעלות כדי ליצור את האפליקציה באמצעות skaffold ולאחסן נכסים לפריסה באמצעות Cloud Deploy. השלב הזה יבוצע על ידי תהליך ה-CICD שלכם בכל בניית אפליקציה.

  1. פיתוח ואחסון של האפליקציה באמצעות 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, המערכת פורסת אותה אוטומטית ביעד הראשון, שהוא תצוגה מקדימה.

  1. נכנסים אל Cloud Deploy במסוף Google Cloud.
  2. לוחצים על sample-app (אפליקציית דוגמה).

במסך הזה יוצג ייצוג גרפי של צינור המכירות.

  1. מוודאים שמוצג קו מתאר ירוק בצד ימין של תיבת התצוגה המקדימה, שמעיד שהגרסה נפרסה בסביבה הזו.
  2. אפשר לעיין בפרטים נוספים על הגרסה על ידי לחיצה על שם הגרסה בקטע Release Details (פרטי הגרסה) בחלק התחתון של המסך.
  3. כדי לוודא שהאפליקציה נפרסה בהצלחה, מריצים את הפקודה הבאה ב-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

  1. לוחצים על סמל התצוגה המקדימה של האתר בפינה השמאלית העליונה של המסך.
  2. בחירה באפשרות 'תצוגה מקדימה ביציאה 8080'

תועברו לדף חדש שבו תוצג ההודעה Hello World!‎

  1. כדי להפסיק את העברת הפורטים, משתמשים ב-ctrl+c בטרמינל.

קידום של גרסה

עכשיו, אחרי שהפריסה של הגרסה בוצעה ליעד הראשון (תצוגה מקדימה) בצינור, אפשר להעביר אותה ליעד הבא (קנרי). מריצים את הפקודה הבאה כדי להתחיל את התהליך.

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

בדיקת המבצע להשקת הגרסה

  1. נכנסים אל צינור הנתונים של אפליקציית הדוגמה במסוף Google Cloud.
  2. מוודאים שמופיע קו מתאר ירוק בצד ימין של תיבת Canary, שמשמעותו היא שהגרסה נפרסה בסביבה הזו.
  3. כדי לוודא שהאפליקציה נפרסה בצורה נכונה, יוצרים מנהרה לאפליקציה

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

  1. לוחצים על סמל התצוגה המקדימה של האתר בפינה השמאלית העליונה של המסך.
  2. בחירה באפשרות 'תצוגה מקדימה ביציאה 8080'

תועברו לדף חדש שבו תוצג ההודעה Hello World!‎

  1. כדי להפסיק את העברת הפורטים, משתמשים ב-ctrl+c בטרמינל.

אישור גרסה לסביבת ייצור

זוכרים שכשיצרנו את יעד הייצור באמצעות prod.yaml, הגדרנו את התג requireApproval כ-true? הפעולה הזו תגרום לכך שיהיה צורך באישור לקידום ל-prod.

  1. מקדמים את גרסה איטרטיבית לקהל מצומצם (canary release) למסלול לסביבת הייצור באמצעות הפקודה הבאה

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. נכנסים אל צינור הנתונים של אפליקציית הדוגמה במסוף Google Cloud.
  2. שימו לב לאינדיקטור הצהוב עם הכיתוב '1 בהמתנה'.

ההודעה הזו מציינת שיש גרסה שהוכנסה לתור לפריסה בסביבת הייצור, אבל היא דורשת בדיקה ואישור.

  1. לוחצים על הלחצן 'בדיקה' שמופיע מתחת להודעה הצהובה.
  2. במסך הבא, לוחצים שוב על 'בדיקה' כדי לגשת למסך האישור של הסביבה הפרודקטיבית.
  3. אפשר גם לבדוק את ההבדלים במניפסט כדי לראות את השינויים. במקרה הזה, קובץ חדש לגמרי.
  4. לוחצים על הלחצן 'אישור'.
  5. חוזרים אל דף צינור הנתונים של האפליקציה לדוגמה, שבו תראו שהגרסה נמצאת בתהליך של העברה לסביבת הייצור.

בדיקת הגרסה לסביבת הייצור

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

  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי ליצור את העברת היציאות:

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

  1. לוחצים על סמל התצוגה המקדימה של האתר בפינה השמאלית העליונה של המסך.
  2. בחירה באפשרות 'תצוגה מקדימה ביציאה 8080'

תועברו לדף חדש שבו תוצג ההודעה Hello World!‎

  1. כדי להפסיק את העברת הפורטים, משתמשים ב-ctrl+c בטרמינל.