במדריך הזה מוסבר איך להשתמש ב-Azure Pipelines, ב-Google Kubernetes Engine (GKE) וב-Google Container Registry כדי ליצור פייפליין של אינטגרציה רציפה (CI) ופריסה רציפה (CD) לאפליקציית אינטרנט של ASP.NET MVC. לצורך המדריך הזה, אפשר לבחור בין שתי אפליקציות לדוגמה:
- אפליקציית אינטרנט ב-ASP.NET Core שמשתמשת ב- .NET 6.0 ופועלת ב-Linux
- אפליקציית אינטרנט של ASP.NET MVC שמשתמשת ב- .NET Framework 4 ופועלת ב-Windows
צינור עיבוד הנתונים של CI/CD משתמש בשני אשכולות GKE נפרדים, אחד לפיתוח ואחד לייצור, כמו שמוצג בתרשים הבא.
בתחילת הצינור, מפתחים מבצעים קומיט של שינויים בבסיס הקוד לדוגמה. הפעולה הזו מפעילה את צינור העברת הנתונים כדי ליצור גרסה ולהטמיע אותה באשכול הפיתוח. מנהל ההפצה יכול לקדם את הגרסה כך שהיא תיפרס באשכול הייצור.
המדריך הזה מיועד למפתחים ולמהנדסי DevOps. ההנחה היא שיש לכם ידע בסיסי ב-Microsoft .NET, ב-Azure Pipelines וב-GKE. בנוסף, כדי לבצע את ההדרכה, צריכה להיות לכם הרשאת אדמין בחשבון Azure DevOps.
מטרות
- חיבור של Google Container Registry ל-Azure Pipelines לפרסום קובצי אימג' של Docker.
- הכנת אפליקציה לדוגמה ב-.NET לפריסה ב-GKE.
- אימות מאובטח מול GKE בלי להשתמש באימות מדור קודם.
- משתמשים בניהול פריסות של Azure Pipelines כדי לתזמר פריסות של GKE.
נכסים מוסתרים
במדריך הזה לא מוסבר איך לחבר את Azure Pipelines לאשכול GKE פרטי, או איך להתחבר לרשתות פרטיות מורשות.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- GKE
- Cloud Load Balancing
- Cloud Storage (for Container Registry)
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
כדאי לעיין בדף התמחור של Azure DevOps כדי לבדוק אם יש עמלות שחלות על השימוש ב-Azure DevOps.
לפני שמתחילים
בדרך כלל מומלץ להשתמש בפרויקטים נפרדים לעומסי עבודה של פיתוח וייצור, כדי שאפשר יהיה להעניק תפקידים והרשאות בניהול זהויות והרשאות גישה (IAM) בנפרד. כדי לפשט את המדריך הזה, נשתמש בפרויקט אחד לשני אשכולות GKE, אחד לפיתוח ואחד לייצור.
-
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
- מוודאים שיש לכם חשבון Azure DevOps ושיש לכם הרשאת אדמין בו. אם עדיין אין לכם חשבון ב-Azure DevOps, אתם יכולים להירשם בדף הבית של Azure DevOps.
יצירת פרויקט ב-Azure DevOps
אתם משתמשים ב-Azure DevOps כדי לנהל את קוד המקור, להריץ בנייה ובדיקות ולתזמן את הפריסה ב-GKE. כדי להתחיל, יוצרים פרויקט בחשבון Azure DevOps.
- עוברים לדף הבית של Azure DevOps (https://dev.azure.com/YOUR_AZURE_DEVOPS_ACCOUNT_NAME).
- לוחצים על פרויקט חדש.
- מזינים שם לפרויקט, למשל
CloudDemo. - מגדירים את Visibility (חשיפה) למצב Private (פרטי) ולוחצים על Create (יצירה).
- אחרי שיוצרים את הפרויקט, בתפריט שמימין לוחצים על Repos (מאגרי מידע).
- לוחצים על Import (ייבוא) כדי ליצור הסתעפות של מאגר
dotnet-docs-samplesמ-GitHub, ואז מגדירים את הערכים הבאים:- סוג המאגר:
Git - כתובת ה-URL של השיבוט:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
- סוג המאגר:
לוחצים על Import.
בסיום תהליך הייבוא, קוד המקור של מאגר
dotnet-docs-samplesמוצג.
קישור של Azure Pipelines ל-Google Container Registry
כדי להגדיר שילוב רציף של אפליקציית CloudDemo, צריך לחבר את Azure Pipelines ל-Container Registry. החיבור הזה מאפשר ל-Azure Pipelines לפרסם קובצי אימג' של קונטיינרים ב-Container Registry.
הגדרת חשבון שירות לפרסום תמונות
יוצרים Google Cloud חשבון שירות בפרויקט:
פותחים את מסוף Google Cloud .
-
במסוף Google Cloud , מפעילים את Cloud Shell.
כדי לחסוך זמן בהקלדת מזהה הפרויקט ואפשרויות האזור של Compute Engine, מריצים את הפקודות הבאות כדי להגדיר ערכי ברירת מחדל להגדרות:
gcloud config set project PROJECT_ID gcloud config set compute/zone us-central1-a
מחליפים את הערך
PROJECT_IDבמזהה הפרויקט.מפעילים את Container Registry API בפרויקט:
gcloud services enable containerregistry.googleapis.comיוצרים חשבון שירות ש-Azure Pipelines משתמש בו כדי לפרסם תמונות Docker:
gcloud iam service-accounts create azure-pipelines-publisher \ --display-name="Azure Pipelines Publisher"מקצים לחשבון השירות את תפקיד האדמין ב-IAM של Artifact Registry (
roles/artifactregistry.admin) כדי לאפשר ל-Azure Pipelines לבצע פעולת push ל-Container Registry:AZURE_PIPELINES_PUBLISHER=azure-pipelines-publisher@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$AZURE_PIPELINES_PUBLISHER \ --role roles/artifactregistry.adminיוצרים מפתח לחשבון השירות:
gcloud iam service-accounts keys create azure-pipelines-publisher.json \ --iam-account $AZURE_PIPELINES_PUBLISHER tr -d '\n' < azure-pipelines-publisher.json > azure-pipelines-publisher-oneline.jsonצופים בתוכן של קובץ המפתח של חשבון השירות:
echo $(<azure-pipelines-publisher-oneline.json)תצטרכו את המפתח של חשבון השירות באחד מהשלבים הבאים.
יצירת חיבור שירות ל-Google Container Registry
ב-Azure Pipelines, יוצרים חיבור שירות חדש ל-Container Registry:
- בתפריט DevOps של Azure, בוחרים באפשרות Project settings (הגדרות הפרויקט), ואז בוחרים באפשרות Pipelines (צינורות) > Service connections (חיבורי שירות).
- לוחצים על יצירת קישור לשירות.
- מהרשימה, בוחרים באפשרות Docker Registry ולוחצים על Next (הבא).
- בתיבת הדו-שיח, מזינים ערכים בשדות הבאים:
- סוג המרשם: אחרים
- Docker Registry:
https://gcr.io/PROJECT_ID, מחליפים אתPROJECT_IDבשם הפרויקט (לדוגמה,https://gcr.io/azure-pipelines-test-project-12345). - מזהה Docker:
_json_key - סיסמה: מדביקים את התוכן של
azure-pipelines-publisher-oneline.json. - שם חיבור השירות:
gcr-tutorial
- לוחצים על שמירה כדי ליצור את הקישור.
בנייה רציפה
עכשיו אפשר להשתמש ב-Azure Pipelines כדי להגדיר אינטגרציה רציפה (CI). לכל קומיט שמועבר בדחיפה למאגר Git, Azure Pipelines יוצר את הקוד ואורז את תוצרי הבנייה במאגר Docker. הקונטיינר מתפרסם ב-Container Registry.
המאגר כבר מכיל את קובץ ה-Dockerfile הבא:
.NET/Linux
.NET Framework/Windows
עכשיו יוצרים צינור חדש שמשתמש בתחביר YAML:
- באמצעות Visual Studio או לקוח
gitשל שורת פקודה, משכפלים את ה-repository החדש של Git ומבצעים checkout של הענףmain. - בשורש המאגר, יוצרים קובץ בשם
azure-pipelines.yml. מעתיקים את הקוד הבא לקובץ:
.NET/Linux
resources: - repo: self fetchDepth: 1 pool: vmImage: ubuntu-20.04 trigger: - main variables: TargetFramework: 'net6.0' BuildConfiguration: 'Release' DockerImageName: 'PROJECT_ID/clouddemo' steps: - task: DotNetCoreCLI@2 displayName: Publish inputs: projects: 'applications/clouddemo/netcore/CloudDemo.MvcCore.sln' publishWebProjects: false command: publish arguments: '--configuration $(BuildConfiguration) --framework=$(TargetFramework)' zipAfterPublish: false modifyOutputPath: false - task: CmdLine@1 displayName: 'Lock image version in deployment.yaml' inputs: filename: /bin/bash arguments: '-c "awk ''{gsub(\"CLOUDDEMO_IMAGE\", \"gcr.io/$(DockerImageName):$(Build.BuildId)\", $0); print}'' applications/clouddemo/netcore/deployment.yaml > $(build.artifactstagingdirectory)/deployment.yaml"' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)' - task: Docker@2 displayName: 'Login to Artifact Registry' inputs: command: login containerRegistry: 'gcr-tutorial' - task: Docker@2 displayName: 'Build and push image' inputs: Dockerfile: 'applications/clouddemo/netcore/Dockerfile' command: buildAndPush repository: '$(DockerImageName)'
.NET Framework/Windows
resources: - repo: self fetchDepth: 1 pool: vmImage: windows-2019 # Matches WINDOWS_LTSC in GKE demands: - msbuild - visualstudio trigger: - master variables: Solution: 'applications/clouddemo/net4/CloudDemo.Mvc.sln' BuildPlatform: 'Any CPU' BuildConfiguration: 'Release' DockerImageName: 'PROJECT_ID/clouddemo' steps: - task: NuGetCommand@2 displayName: 'NuGet restore' inputs: restoreSolution: '$(Solution)' - task: VSBuild@1 displayName: 'Build solution' inputs: solution: '$(Solution)' msbuildArgs: '/p:DeployOnBuild=true /p:PublishProfile=FolderProfile' platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' - task: PowerShell@2 displayName: 'Lock image version in deployment.yaml' inputs: targetType: 'inline' script: '(Get-Content applications\clouddemo\net4\deployment.yaml) -replace "CLOUDDEMO_IMAGE","gcr.io/$(DockerImageName):$(Build.BuildId)" | Out-File -Encoding ASCII $(build.artifactstagingdirectory)\deployment.yaml' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)' - task: Docker@2 displayName: 'Login to Artifact Registry' inputs: command: login containerRegistry: 'gcr-tutorial' - task: Docker@2 displayName: 'Build and push image' inputs: Dockerfile: 'applications/clouddemo/net4/Dockerfile' command: buildAndPush repository: '$(DockerImageName)'
מחליפים את
PROJECT_IDבשם הפרויקט ושומרים את הקובץ.שומרים את השינויים ודוחפים אותם אל Azure Pipelines.
Visual Studio
- פותחים את Team Explorer ולוחצים על סמל דף הבית.
- לוחצים על שינויים.
- מזינים הודעת קומיט כמו
Add pipeline definition. - לוחצים על Commit All and Push (ביצוע Commit של הכול והעלאה).
שורת הפקודה
העברת כל הקבצים ששונו אל אזור ההכנה:
git add -Aשומרים את השינויים במאגר המקומי:
git commit -m "Add pipeline definition"שולחים את השינויים ל-Azure DevOps:
git push
בתפריט Azure DevOps, בוחרים באפשרות Pipelines ואז לוחצים על Create Pipeline.
בוחרים באפשרות Azure Repos Git.
בוחרים את המאגר.
בדף Review your pipeline YAML (בדיקת קובץ ה-YAML של צינור הנתונים), לוחצים על Run (הפעלה).
מופעלת בנייה חדשה. יכול להיות שיחלפו כ-6 דקות עד שהגרסה תהיה מוכנה.
כדי לוודא שהתמונה פורסמה ב-Container Registry, עוברים לפרויקט במסוף Google Cloud , בוחרים באפשרות Container Registry > Images ואז לוחצים על clouddemo.
מוצגת תמונה אחת והתג שלה. התג תואם למזהה המספרי של ה-Build שהופעל ב-Azure Pipelines.
פריסה רציפה
מערכת Azure Pipelines בונה את הקוד שלכם באופן אוטומטי ומפרסמת תמונות Docker לכל פעולת commit, כך שאתם יכולים להתפנות לפריסה.
בניגוד למערכות אחרות של אינטגרציה רציפה (CI), ב-Azure Pipelines יש הבחנה בין בנייה לפריסה, והיא מספקת קבוצה מיוחדת של כלים שנקראת Release Management לכל המשימות שקשורות לפריסה.
הכלי Azure Pipelines Release Management מבוסס על המושגים הבאים:
- גרסה היא קבוצה של פריטי מידע שמרכיבים גרסה ספציפית של האפליקציה, ובדרך כלל הם תוצאה של תהליך בנייה.
- פריסה היא התהליך של לקיחת גרסה ופריסתה בסביבה ספציפית.
- פריסה מבצעת קבוצה של משימות, שאפשר לקבץ אותן בעבודות.
- שלבים מאפשרים לפלח את צינור הנתונים, ואפשר להשתמש בהם כדי לתזמן פריסות בסביבות שונות – למשל, סביבות פיתוח ובדיקה.
הארטיפקט העיקרי שנוצר בתהליך build של CloudDemo הוא קובץ האימג' של Docker. עם זאת, מכיוון שקובץ האימג' של Docker מתפרסם ב-Container Registry, הוא לא נכלל בהיקף של Azure Pipelines. לכן התמונה לא מתאימה להגדרת פריט תוכן.
כדי לבצע פריסה ב-Kubernetes, צריך גם מניפסט, שדומה לרשימת חומרים. קובץ המניפסט לא רק מגדיר את המשאבים ש-Kubernetes אמורה ליצור ולנהל, אלא גם מציין את הגרסה המדויקת של קובץ אימג' של Docker שבה צריך להשתמש. מניפסט Kubernetes מתאים מאוד לשמש כארטיפקט שמגדיר את הגרסה ב-Azure Pipelines Release Management.
הגדרת הפריסה של Kubernetes
כדי להפעיל את CloudDemo ב-Kubernetes, אתם צריכים את המשאבים הבאים:
- פריסה שמגדירה פוד יחיד שמריץ את קובץ האימג' של Docker שנוצר על ידי ה-build.
- שירות NodePort שמאפשר למאזן עומסים לגשת ל-Pod.
- Ingress שחושף את האפליקציה לאינטרנט הציבורי באמצעות מאזן עומסים מסוג Cloud HTTP(S).
המאגר כבר מכיל את מניפסט Kubernetes הבא שמגדיר את המשאבים האלה:
.NET/Linux
.NET Framework/Windows
הגדרת סביבות הפיתוח והייצור
לפני שחוזרים אל Azure Pipelines Release Management, צריך ליצור את אשכולות GKE.
יצירת אשכולות GKE
חוזרים למופע Cloud Shell.
מפעילים את GKE API בפרויקט:
gcloud services enable container.googleapis.com
יוצרים את אשכול הפיתוח באמצעות הפקודה הבאה. שימו לב: יכול להיות שיעברו כמה דקות עד שהתהליך יסתיים:
.NET/Linux
gcloud container clusters create azure-pipelines-cicd-dev --enable-ip-alias
.NET Framework/Windows
gcloud container clusters create azure-pipelines-cicd-dev --enable-ip-alias gcloud container node-pools create azure-pipelines-cicd-dev-win \ --cluster=azure-pipelines-cicd-dev \ --image-type=WINDOWS_LTSC \ --no-enable-autoupgrade \ --machine-type=n1-standard-2יוצרים את אשכול הייצור באמצעות הפקודה הבאה. הערה: יכול להיות שהתהליך יימשך כמה דקות:
.NET/Linux
gcloud container clusters create azure-pipelines-cicd-prod --enable-ip-alias
.NET Framework/Windows
gcloud container clusters create azure-pipelines-cicd-prod --enable-ip-alias gcloud container node-pools create azure-pipelines-cicd-prod-win \ --cluster=azure-pipelines-cicd-prod \ --image-type=WINDOWS_LTSC \ --no-enable-autoupgrade \ --machine-type=n1-standard-2
חיבור Azure Pipelines לאשכול הפיתוח
בדומה לשימוש ב-Azure Pipelines כדי להתחבר למאגר Docker חיצוני כמו Container Registry, Azure Pipelines תומך בשילוב של אשכולות Kubernetes חיצוניים.
אפשר לבצע אימות ב-Container Registry באמצעותGoogle Cloud חשבון שירות, אבל השימוש בחשבונות שירות Google Cloud לא נתמך ב-Azure Pipelines לצורך אימות ב-GKE. במקום זאת, צריך להשתמש בחשבון שירות ב-Kubernetes.
לכן, כדי לחבר את Azure Pipelines לאשכול הפיתוח, צריך קודם ליצור חשבון שירות של Kubernetes.
ב-Cloud Shell, מתחברים לאשכול הפיתוח:
gcloud container clusters get-credentials azure-pipelines-cicd-dev
יוצרים חשבון שירות ב-Kubernetes עבור Azure Pipelines:
kubectl create serviceaccount azure-pipelines-deploy
יוצרים סוד ב-Kubernetes שמכיל פרטי כניסה לאסימון עבור Azure Pipelines:
kubectl create secret generic azure-pipelines-deploy-token --type=kubernetes.io/service-account-token --dry-run -o yaml \ | kubectl annotate --local -o yaml -f - kubernetes.io/service-account.name=azure-pipelines-deploy \ | kubectl apply -f -
מקצים את התפקיד
cluster-adminלחשבון השירות על ידי יצירת קישור תפקיד ברמת האשכול:kubectl create clusterrolebinding azure-pipelines-deploy --clusterrole=cluster-admin --serviceaccount=default:azure-pipelines-deploy
קובעים את כתובת ה-IP של האשכול:
gcloud container clusters describe azure-pipelines-cicd-dev --format=value\(endpoint\)
תצטרכו את הכתובת הזו בהמשך.
בתפריט Azure DevOps, בוחרים באפשרות Project settings (הגדרות הפרויקט) ואז באפשרות Pipelines (צינורות) > Service connections (חיבורי שירות).
לוחצים על New service connection (חיבור שירות חדש).
בוחרים באפשרות Kubernetes ולוחצים על הבא.
מגדירים את ההגדרות הבאות.
- שיטת אימות: חשבון שירות.
- כתובת ה-URL של השרת:
https://PRIMARY_IP. מחליפים אתPRIMARY_IPבכתובת ה-IP שקבעתם קודם. - Secret: הסוד של Kubernetes שיצרתם קודם. כדי לקבל את הסוד, מריצים את הפקודה הבאה, מעתיקים את הסוד ומעתיקים אותו לדף Azure.
kubectl get secret azure-pipelines-deploy-token -o yaml
- שם חיבור השירות:
azure-pipelines-cicd-dev.
לוחצים על Save.
חיבור Azure Pipelines לאשכול הייצור
כדי לחבר את Azure Pipelines לאשכול הייצור, אפשר לפעול באותו אופן.
ב-Cloud Shell, מתחברים לאשכול הייצור:
gcloud container clusters get-credentials azure-pipelines-cicd-prod
יוצרים חשבון שירות ב-Kubernetes עבור Azure Pipelines:
kubectl create serviceaccount azure-pipelines-deploy
מקצים את התפקיד
cluster-adminלחשבון השירות על ידי יצירת קישור תפקיד ברמת האשכול:kubectl create clusterrolebinding azure-pipelines-deploy --clusterrole=cluster-admin --serviceaccount=default:azure-pipelines-deploy
קובעים את כתובת ה-IP של האשכול:
gcloud container clusters describe azure-pipelines-cicd-prod --format=value\(endpoint\)
תצטרכו את הכתובת הזו בהמשך.
בתפריט Azure DevOps, בוחרים באפשרות Project settings (הגדרות הפרויקט) ואז באפשרות Pipelines (צינורות) > Service connections (חיבורי שירות).
לוחצים על New service connection (חיבור שירות חדש).
בוחרים באפשרות Kubernetes ולוחצים על הבא.
מגדירים את ההגדרות הבאות:
- שיטת אימות: חשבון שירות.
- כתובת ה-URL של השרת:
https://PRIMARY_IP. מחליפים אתPRIMARY_IPבכתובת ה-IP שקבעתם קודם. - סוד: מריצים את הפקודה הבאה ב-Cloud Shell ומעתיקים את הפלט:
kubectl get secret $(kubectl get serviceaccounts azure-pipelines-deploy -o custom-columns=":secrets[0].name") -o yaml
- שם חיבור השירות:
azure-pipelines-cicd-prod.
לוחצים על Save.
הגדרת צינור עיבוד הנתונים להפצה
אחרי שמגדירים את התשתית של GKE, חוזרים אל Azure Pipelines כדי להפוך את הפריסה לאוטומטית, כולל הפעולות הבאות:
- פריסה בסביבת הפיתוח.
- בקשת אישור ידני לפני הפעלת פריסה בסביבת הייצור.
- פריסה בסביבת הייצור.
יצירת הגדרת גרסה
קודם כל, צריך ליצור הגדרה חדשה של גרסה.
- בתפריט Azure DevOps, בוחרים באפשרות Pipelines (צינורות) > Releases (גרסאות).
- לוחצים על New pipeline (צינור חדש).
- ברשימת התבניות, בוחרים באפשרות Empty job (משימה ריקה).
- כשמתבקשים להזין שם לשלב, מזינים
Development. - בחלק העליון של המסך, נותנים שם למהדורה CloudDemo-KubernetesEngine.
- בתרשים של צינור הנתונים, לצד Artifacts (פריטי מידע), לוחצים על Add (הוספה).
לוחצים על Build (בנייה) ומוסיפים את ההגדרות הבאות:
- סוג המקור: Build
- מקור (צינור עיבוד נתונים לבנייה): בוחרים את הגדרת הבנייה (אמורה להיות רק אפשרות אחת)
- גרסת ברירת מחדל:
Latest - כינוי המקור:
manifest
לוחצים על הוספה.
בתיבה Artifact (ארטיפקט), לוחצים על Continuous deployment trigger (הסמל של חץ ברק) כדי להוסיף טריגר לפריסה.
בקטע Continuous deployment trigger (טריגר לפריסה רציפה), מעבירים את המתג למצב Enabled (מופעל).
לוחצים על Save.
אם רוצים, כותבים תגובה ומאשרים בלחיצה על אישור.
צינור העיבוד ייראה כך:
פריסה באשכול הפיתוח
אחרי שיוצרים את הגדרת הפריסה, אפשר להגדיר את הפריסה לאשכול הפיתוח של GKE.
- בתפריט, עוברים לכרטיסייה משימות.
לוחצים על Agent job ומגדירים את ההגדרות הבאות:
- מאגר סוכנים: Azure Pipelines
- Agent specification: ubuntu-18.04
לצד Agent job, לוחצים על Add a task to agent job כדי להוסיף שלב לשלב.
בוחרים את המשימה Deploy to Kubernetes (פריסה ב-Kubernetes) ולוחצים על Add (הוספה).
לוחצים על המשימה שנוספה ומגדירים את ההגדרות הבאות:
- שם לתצוגה:
Deploy - פעולה: פריסה
- חיבור לשירות Kubernetes: azure-pipelines-cicd-dev
- Namespace:
default - שיטת הבידינג: ללא
- קובצי מניפסט:
manifest/drop/deployment.yaml
- שם לתצוגה:
לוחצים על Save.
אם רוצים, כותבים תגובה ומאשרים בלחיצה על אישור.
פריסה באשכול הייצור
לבסוף, מגדירים את הפריסה באשכול הייצור של GKE.
- בתפריט, עוברים לכרטיסייה Pipeline.
- בתיבה 'שלבים', בוחרים באפשרות הוספה > שלב חדש.
- ברשימת התבניות, בוחרים באפשרות Empty job (משימה ריקה).
- כשמתבקשים להזין שם לשלב, מזינים
Production. - לוחצים על סמל הברק של השלב החדש שנוצר.
מגדירים את ההגדרות הבאות:
- Select trigger (בחירת טריגר): After stage (אחרי שלב)
- שלבים: פיתוח
- אישורים לפני פריסה: (מופעל)
- גורמים מאשרים: בוחרים את שם המשתמש שלכם.
עכשיו צינור המכירות נראה כך:
עוברים לכרטיסייה משימות.
מעבירים את העכבר מעל הכרטיסייה משימות ובוחרים באפשרות משימות > הפקה.
לוחצים על Agent job ומגדירים את ההגדרות הבאות:
- מאגר סוכנים: Azure Pipelines
- Agent specification: ubuntu-18.04
לוחצים על הוספת משימה לעבודת הסוכן כדי להוסיף שלב לשלב.
בוחרים את המשימה Deploy to Kubernetes (פריסה ב-Kubernetes) ולוחצים על Add (הוספה).
לוחצים על המשימה שנוספה ומגדירים את ההגדרות הבאות:
- שם לתצוגה:
Deploy - פעולה: פריסה
- חיבור שירות Kubernetes: azure-pipelines-cicd-prod
- Namespace:
default - שיטת הבידינג: ללא
- קובצי מניפסט:
manifest/drop/deployment.yaml
- שם לתצוגה:
לוחצים על Save.
אם רוצים, כותבים תגובה ומאשרים בלחיצה על אישור.
הרצת צינור עיבוד הנתונים
אחרי שהגדרתם את כל צינור העיבוד, אתם יכולים לבדוק אותו על ידי ביצוע שינוי בקוד המקור:
במחשב המקומי, פותחים את הקובץ
Index.cshtmlממאגר Git ששיבטתם קודם:.NET/Linux
הקובץ נמצא במיקום
applications\clouddemo\netcore\CloudDemo.MvcCore\Views\Home\.NET Framework/Windows
הקובץ נמצא במיקום
applications\clouddemo\net4\CloudDemo.Mvc\Views\Home\בשורה 26, משנים את הערך של
ViewBag.Titleמ-Home Pageל-This app runs on GKE.שומרים את השינויים ודוחפים אותם אל Azure Pipelines.
Visual Studio
- פותחים את Team Explorer ולוחצים על סמל דף הבית.
- לוחצים על שינויים.
- מזינים הודעת קומיט כמו
Change site title. - לוחצים על Commit All and Push (ביצוע Commit של הכול והעלאה).
שורת הפקודה
העברת כל הקבצים ששונו אל אזור ההכנה:
git add -Aשומרים את השינויים במאגר המקומי:
git commit -m "Change site title"שליחת השינויים אל Azure Pipelines:
git push
בתפריט Azure DevOps, בוחרים באפשרות Pipelines (צינורות). מופעל build.
אחרי שהבנייה מסתיימת, בוחרים באפשרות Pipelines (צינורות) > Releases (גרסאות). A מתחיל תהליך פרסום.
לוחצים על Release-1 כדי לפתוח את דף הפרטים, ומחכים שהסטטוס של שלב הפיתוח ישתנה להצלחה.
במסוף Google Cloud , בוחרים באפשרות Kubernetes Engine > Services & Ingress > Ingress.
מחפשים את שירות הכניסה (Ingress) של אשכול azure-pipelines-cicd-dev ומחכים שהסטטוס שלו ישתנה לOk. הפעולה עשויה להימשך כמה דקות.
פותחים את הקישור בעמודה Frontends באותה שורה. יכול להיות שתופיע שגיאה בהתחלה, כי לוקח כמה דקות עד שמאזן העומסים הופך לזמין. כשהוא מוכן, אפשר לראות ש-CloudDemo נפרס ומשתמש בכותרת המותאמת אישית.
ב-Azure Pipelines, לוחצים על הלחצן Approve (אישור) שנמצא מתחת לשלב Prod (ייצור) כדי להעביר את הפריסה לסביבת הייצור.
אם הלחצן לא מופיע, יכול להיות שצריך קודם לאשר או לדחות גרסה קודמת.
אם רוצים, כותבים תגובה ואז לוחצים על אישור.
מחכים שהסטטוס של סביבת הייצור ישתנה להצלחה. יכול להיות שתצטרכו לרענן את הדף בדפדפן באופן ידני.
במסוף Google Cloud , מרעננים את הדף Services & Ingress.
מחפשים את שירות ה-Ingress של אשכול azure-pipelines-cicd-prod ומחכים שהסטטוס שלו ישתנה לOk. הפעולה עשויה להימשך כמה דקות.
פותחים את הקישור בעמודה Frontends באותה שורה. שוב, יכול להיות שתראו שגיאה בהתחלה כי לוקח כמה דקות עד שמאזן העומסים יהיה זמין. כשהיא מוכנה, אפליקציית CloudDemo מופיעה שוב עם הכותרת המותאמת אישית, והפעם היא פועלת באשכול הייצור.
הסרת המשאבים
כדי להימנע מחיובים נוספים אחרי שתסיימו את המדריך הזה, מומלץ למחוק את הישויות שיצרתם.
מחיקת הפרויקט ב-Azure Pipelines
כדי למחוק את פרויקט Azure Pipelines, אפשר לעיין במסמכי Azure DevOps Services. מחיקת הפרויקט ב-Azure Pipelines תגרום לאובדן של כל השינויים בקוד המקור.
מחיקת הפיתוח והפרויקטים Google Cloud
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- מגדירים בקרת גישה פרטנית ל-Artifact Registry.
- איך פורסים קבוצת SQL Server עם זמינות גבוהה ב-Compute Engine
- מידע נוסף על .NET ב- Google Cloud Platform
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.