1. סקירה כללית
בשיעור ה-Lab הזה תפרסו אפליקציית .Net ל-Cloud Run באמצעות Cloud Deploy. נפתח קובץ אימג' בקונטיינר באמצעות Cloud Build בלי להשתמש בקובץ Docker. תגדירו צינור עיבוד נתונים עם שלוש סביבות יעד באמצעות Cloud Deploy ותבצעו את השלבים לקידום הגרסה דרך סביבות. בשלב האחרון תצטרכו לאשר את הפריסה של הגרסה בסביבת הייצור.
מה זה Cloud Build?
באמצעות Cloud Build תוכלו לפתח תוכנות במהירות בכל שפות התכנות.
מה זה Cloud Deploy?
Cloud Deploy הוא שירות מנוהל לפיתוח רציף (continuous delivery). באמצעות 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. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-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 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
ממתינים עד לסיום הפריסה בסביבת בקרת האיכות. קידום הגרסה ליעד הבא(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 על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.