1. סקירה כללית
בשיעור ה-Lab הזה תפרסו אפליקציית .Net ב-Cloud Run באמצעות Cloud Deploy. במדריך הזה תלמדו ליצור קובץ אימג' של קונטיינר באמצעות Cloud Build בלי להשתמש ב-Dockerfile. תגדירו צינור עיבוד נתונים עם שלוש סביבות יעד באמצעות Cloud Deploy, ותעברו על השלבים לקידום הגרסה דרך הסביבות. בסיום, מאשרים את הפריסה לסביבת הייצור.

מה זה Cloud Build?
בעזרת Cloud Build אפשר ליצור תוכנה במהירות בכל שפות התכנות.
מה זה Cloud Deploy?
Cloud Deploy הוא שירות מנוהל במלואו של פיתוח רציף. באמצעות 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 ואת סביבות ה-Shell.
2. הגדרה ודרישות
הגדרה של פרויקט ב-Cloud
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי להשבית את המשאבים ולא לחייב אתכם מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הגדרת הסביבה
לוחצים על הסמל משמאל לסרגל החיפוש כדי להפעיל את 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 Deploy
מחליפים את הערך _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 Console או Cloud Shell, מקדמים את הגרסה ליעד הבא(qa-env).
מקדמים את הגרסה באמצעות Cloud Shell על ידי הרצת פקודת gcloud לקידום הגרסה.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
מחכים עד שהפריסה לסביבת QA תסתיים. קידום מהדורה ליעד הבא(סביבת ייצור).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
פותחים את Cloud Deploy ב-Cloud Console ומאשרים את הגרסה לפריסה בסביבת הייצור.

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