1. סקירה כללית
בשיעור ה-Lab הזה תפרסו אפליקציית .Net ל-Cloud Run באמצעות Cloud Deploy. נלמד איך יוצרים קובץ אימג' של קונטיינר באמצעות Cloud Build בלי להשתמש ב-Dockerfile. תגדירו צינור עיבוד נתונים עם שלוש סביבות יעד באמצעות Cloud Deploy ותבצעו את השלבים לקידום הגרסה דרך סביבות. בסיום, תאשרו את הפריסה של הגרסה בסביבת הייצור.
מה זה Cloud Build?
בעזרת Cloud Build אפשר לפתח תוכנה במהירות בכל שפות התכנות.
מה זה Cloud Deploy?
Cloud Deploy הוא שירות מנוהל לפריסה רציפה (CD). באמצעות Cloud Deploy אפשר ליצור צינורות עיבוד נתונים לפריסה ל-GKE, Anthos ו-Cloud Run.
מה זה Cloud Run?
באמצעות Cloud Run אתם יכולים לפרוס אפליקציות בקונטיינרים עם יכולת התאמה רחבה שנכתבו בכל שפה (כולל Go, Python, Java, Node.js, .NET ו-Ruby) בפלטפורמה מנוהלת.
מה זה Skaffold?
Skaffold הוא כלי שורת הפקודה שמאפשר פיתוח רציף של אפליקציות שמבוססות על Kubernetes. ב-Cloud Deploy משתמשים ב-Skaffold לפעולות של עיבוד ופריסה.
מה תלמדו
בשיעור Lab זה תלמדו איך:
- יצירת צינור עיבוד נתונים של Cloud Deploy
- יצירת קובץ אימג' של קונטיינר לאפליקציית .Net באמצעות Cloud Build בלי להשתמש ב-Dockerfile
- פריסת אפליקציות ב-Cloud Run באמצעות Cloud Deploy
- קידום גרסאות של Cloud Deploy
דרישות מוקדמות
- שיעור ה-Lab הזה מבוסס על היכרות עם הסביבות של Cloud Console והמעטפת.
2. הגדרה ודרישות
הגדרת פרויקט ב-Cloud
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא משנה מה המחרוזת הזו. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מזוהה בתור
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות את השם אחרי השלב הזה, והוא יישאר למשך כל תקופת הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או ב-API של Cloud. השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הגדרת סביבה
לוחצים על הסמל שמופיע מימין לסרגל החיפוש כדי להפעיל את Cloud Shell.
מריצים את הפקודה הבאה ב-Cloud Shell כדי להגדיר את משתני הסביבה של הפרויקט:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
מפעילים ממשקי API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
יוצרים מאגר של Artifact Registry לאחסון קובצי אימג' של קונטיינרים של אפליקציות:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. בדיקת קובצי התצורה
שכפול קוד המקור של האפליקציה:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
בודקים את הגדרות צינור עיבוד הנתונים של Cloud Deploy:
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
בודקים את קובץ skaffold.yaml
שמגדיר שלוש סביבות, ושמשתמש ב-Cloud Run כשירות יעד.
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
בדיקת קובצי התצורה של השירות.
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
סקירה של קובץ cloudbuild.yaml
שכולל את השלבים לפיתוח קובץ אימג' של קונטיינר וליצירת גרסה של Cloud Deploy:
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. יצירת צינור עיבוד נתונים לפריסה ב-Cloud
מחליפים את הערך _PROJECT_ID בקובץ clouddeploy.yaml:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
יצירת צינור עיבוד נתונים לפריסה ב-Cloud Deploy:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
בדיקת צינור עיבוד הנתונים שנוצר ב-Cloud Deploy.
5. פיתוח קובץ אימג' בקונטיינר ויצירת גרסה
מוסיפים הרשאות של Cloud Deploy Operator לחשבון השירות ב-Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
יצירת קובץ אימג' של קונטיינר וגרסה של Cloud Deploy:
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
בודקים את הגרסה שנוצרה ב-Cloud Deploy. יש להמתין עד להשלמת הפריסה בסביבת הפיתוח.
6. קידום הגרסה לסביבות QA ו-PROD
באמצעות מסוף Cloud או Cloud Shell, מעבירים את הגרסה המשוחררת ליעד הבא (qa-env).
כדי לקדם את הגרסה באמצעות Cloud Shell, מריצים את הפקודה gcloud כדי לקדם את הגרסה.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
ממתינים עד לסיום הפריסה בסביבת בקרת האיכות. קידום הגרסה ליעד הבא(prod-env).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
פותחים את Cloud Deploy במסוף Cloud ומאשרים את הגרסה לפריסה בסביבת הייצור.
מידע על מצב צינור עיבוד הנתונים Cloud Deploy ומדדי DORA שזמינים ('מספר הפריסה', 'תדירות פריסה', 'שיעור כשלים בפריסה').
מדד | תיאור |
מספר הפריסות | המספר הכולל של פריסות שבוצעו בהצלחה והפריסות שנכשלו ביעד הסופי בצינור עיבוד הנתונים להעברה. |
תדירות הפריסה | תדירות הפריסה של צינור עיבוד הנתונים להעברת נתונים ליעד הסופי בצינור עיבוד הנתונים.אחד מארבעת המדדים העיקריים המוגדרים בתוכנית DevOps Research and Assessment (DORA). |
שיעור כשלים בפריסה | אחוז ההשקות שנכשלו ליעד הסופי בצינור עיבוד הנתונים. |
בודקים את האפליקציות שנפרסו ב-Cloud Run:
7. מעולה!
כל הכבוד, סיימת את ה-Codelab!
נושאים שטיפלנו בהם:
- איך ליצור צינור עיבוד נתונים לפריסה ב-Cloud Deploy
- איך יוצרים קובץ אימג' של קונטיינר לאפליקציית .Net באמצעות Cloud Build
- איך לפרוס אפליקציות ב-Cloud Run באמצעות Cloud Deploy
- איך לקדם גרסה של Cloud Deploy
הסרת המשאבים
כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.