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

1. מטרות

במדריך הזה תיצרו שלושה אשכולות GKE שנקראים Preview (תצוגה מקדימה), Canary ו-prod. לאחר מכן, תיצרו יעד של Cloud Deploy שתואם לכל אשכול וצינור עיבוד נתונים של Cloud Deploy שיגדיר את רצף השלבים לביצוע הפריסה ביעדים האלה.

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

אפשר לפצל את המטרות של המדריך הזה לשלבים הבאים:

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

  1. קביעת ברירות המחדל להגדרות ב-gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. שכפול מאגר

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

  1. יוצרים קובץ בספריית הפריסה בשם 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.
  1. יוצרים קובץ בספריית הפריסה בשם 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

  1. יוצרים קובץ בספריית הפריסה בשם 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.

  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. יוצרים קובץ בספריית הפריסה בשם צינור עיבוד נתונים.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 במהלך יצירת הגרסה.

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

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

4. שלב הפיתוח

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

  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. לוחצים על 'אפליקציה לדוגמה'

במסך הזה תראו ייצוג גרפי של צינור עיבוד הנתונים.

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

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 באמצעות prod.yaml, הגדרנו את התג requiredApproval כ-true. פעולה זו תאלץ דרישה לקבל אישור לקידום במוצר.

  1. קידום הגרסה הקנרית לסביבת ייצור באמצעות הפקודה הבאה

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. מריצים את הפקודה הבאה ב-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

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

הלחיצה תעביר אתכם לדף חדש עם ההודעה 'Hello World! '

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