במדריך הזה נסביר איך להשתמש ב-Azure Pipelines וב-Compute Engine כדי ליצור צינור עיבוד נתונים של אינטגרציה רציפה (CI) ופריסה רציפה (CD) לאפליקציית אינטרנט של ASP.NET MVC. האפליקציה משתמשת ב-Microsoft Internet Information Services ופועלת ב-Windows Server.
צינור עיבוד הנתונים של CI/CD משתמש בשתי סביבות נפרדות, אחת לבדיקה ואחת לייצור.
בתחילת הצינור, מפתחים מבצעים קומיט של שינויים בבסיס הקוד לדוגמה. הפעולה הזו מפעילה את צינור הנתונים כדי ליצור את האפליקציה, לארוז אותה כקובץ ZIP ולהעלות את קובץ ה-ZIP ל-Cloud Storage.
לאחר מכן, החבילה מופצת אוטומטית לסביבת הפיתוח באמצעות עדכון מתגלגל. אחרי שבודקים את הגרסה, מנהל הגרסה יכול לקדם אותה כך שהיא תופעל בסביבת הייצור.
המדריך הזה מיועד למפתחים ולמהנדסי DevOps. ההנחה היא שיש לכם ידע בסיסי ב-NET Framework, ב-Windows Server, ב-IIS, ב-Azure Pipelines וב-Compute Engine. בנוסף, כדי לבצע את ההדרכה, צריכה להיות לכם הרשאת אדמין בחשבון Azure DevOps.
מטרות
- משתמשים ב-Compute Engine Managed Instance Groups כדי להטמיע פריסות מתגלגלות.
- מגדירים צינור עיבוד נתונים של CI/CD ב-Azure Pipelines כדי לתזמן את תהליכי הבנייה, היצירה והפריסה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
כדאי לעיין בדף התמחור של Azure DevOps כדי לבדוק אם יש עמלות שחלות על השימוש ב-Azure DevOps.
לפני שמתחילים
בדרך כלל מומלץ להשתמש בפרויקטים נפרדים לעומסי עבודה של פיתוח וייצור, כדי שאפשר יהיה להעניק הרשאות ותפקידים בניהול זהויות והרשאות גישה (IAM) באופן נפרד. כדי לפשט את המדריך, נשתמש בפרויקט יחיד לסביבות הפיתוח והייצור.
-
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
מפעילים את ממשקי ה-API של Compute Engine ו-Cloud Storage.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים- מוודאים שיש לכם חשבון Azure DevOps ושיש לכם הרשאת אדמין בו. אם עדיין אין לכם חשבון ב-Azure DevOps, אתם יכולים להירשם בדף הבית של Azure DevOps.
יצירת פרויקט ב-Azure DevOps
אתם משתמשים ב-Azure DevOps כדי לנהל את קוד המקור, להריץ גרסאות build ובדיקות ולתזמן את הפריסה ב-Compute Engine. כדי להתחיל, יוצרים פרויקט בחשבון 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מוצג.בתפריט, לוחצים על Repos > Branches.
מעבירים את העכבר מעל הענף
main. בצד שמאל יופיע הלחצן ....לוחצים על ... > הגדרה כענף ברירת מחדל.
גרסת Build רציפה
עכשיו אפשר להשתמש ב-Azure Pipelines כדי להגדיר צינור עיבוד נתונים לבנייה. לכל קומיט שנשלח למאגר Git, Azure Pipelines בונה את הקוד, אורז אותו בקובץ ZIP ומפרסם את החבילה שנוצרת באחסון הפנימי של Azure Pipelines.
בהמשך, מגדירים צינור עיבוד נתונים להפצה שמשתמש בחבילות מאחסון Azure Pipelines ופורס אותן ב-Compute Engine.
יצירת הגדרת build
יוצרים הגדרת build חדשה ב-Azure Pipelines באמצעות תחביר YAML:
- באמצעות Visual Studio או לקוח
gitשל שורת פקודה, משכפלים את ה-repository החדש של Git. - בשורש המאגר, יוצרים קובץ בשם
azure-pipelines.yml. מעתיקים את הקוד הבא ומדביקים אותו בקובץ:
resources: - repo: self fetchDepth: 1 trigger: - main variables: artifactName: 'CloudDemo.Mvc' jobs: - job: Build displayName: Build application condition: succeeded() pool: vmImage: windows-latest demands: - msbuild - visualstudio variables: Solution: 'applications/clouddemo/net4/CloudDemo.Mvc.sln' BuildPlatform: 'Any CPU' BuildConfiguration: 'Release' ArtifactName: 'CloudDemo.Web' steps: - task: NuGetCommand@2 displayName: 'NuGet restore' inputs: restoreSolution: '$(Solution)' - task: VSBuild@1 displayName: 'Build solution' inputs: solution: '$(Solution)' msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"' platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)/CloudDemo.Mvc.zip' ArtifactName: '$(ArtifactName)'
שומרים את השינויים ודוחפים אותם אל 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 (הפעלה).
מופעלת בנייה חדשה. יכול להיות שיחלפו כ-2 דקות עד שהבנייה תושלם. בסיום הבנייה, חבילת האפליקציה
CloudDemo.Mvc.zip, שמכילה את כל הקבצים של אפליקציית האינטרנט, זמינה באזור האחסון הפנימי של Azure Pipelines.
פריסה רציפה
עכשיו, כש-Azure Pipelines יוצר באופן אוטומטי את הקוד שלכם לכל פעולת commit, אתם יכולים להתפנות לפריסה.
בניגוד למערכות אחרות של אינטגרציה רציפה (CI), ב-Azure Pipelines יש הבחנה בין בנייה לפריסה, והמערכת מספקת קבוצה מיוחדת של כלים שנקראת Release Management לכל המשימות שקשורות לפריסה.
הכלי Azure Pipelines Release Management מבוסס על המושגים הבאים:
- גרסה היא קבוצה של פריטי מידע שמרכיבים גרסה ספציפית של האפליקציה, ובדרך כלל הם תוצאה של תהליך בנייה.
- פריסה היא התהליך של לקיחת גרסה ופריסתה בסביבה ספציפית.
- פריסה מבצעת קבוצה של משימות, שאפשר לקבץ אותן בעבודות.
- שלבים מאפשרים לפלח את צינור הנתונים, ואפשר להשתמש בהם כדי לתזמן פריסות בסביבות שונות – למשל, סביבות פיתוח ובדיקה.
מגדירים את צינור ההפצה כך שיופעל בכל פעם שנוצרת גרסה חדשה. הצינור מורכב משלושה שלבים:
- בשלב הראשון, הפייפליין לוקח את חבילת האפליקציה מאזור האחסון של Azure Pipelines artifact ומפרסם אותה בקטגוריה של Cloud Storage, כדי ש-Compute Engine יוכל לגשת לחבילה.
- בשלב השני, צינור הנתונים מעדכן את סביבת הפיתוח באמצעות עדכון הדרגתי.
- בשלב האחרון, אחרי האישור, צינור העברת הנתונים מעדכן את סביבת הייצור באמצעות עדכון מתגלגל.
יצירת קטגוריה של Cloud Storage עבור ארטיפקטים של בנייה
יוצרים קטגוריה של Cloud Storage לאחסון חבילות של אפליקציות. בהמשך, מגדירים את Compute Engine כך שמכונות וירטואליות חדשות יוכלו לשלוף באופן אוטומטי חבילות של אפליקציות מהקטגוריה הזו.
- במסוף Google Cloud , עוברים לפרויקט החדש שיצרתם.
פותחים את Cloud Shell.
כדי לחסוך זמן, כדאי להגדיר ערכי ברירת מחדל למזהה הפרויקט ולאזור Compute Engine:
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud , ואת ZONE בשם התחום (zone) שבו רוצים ליצור את המשאבים. אם אתם לא בטוחים באיזה אזור לבחור, השתמשו באפשרות
us-central1-a.דוגמה:
gcloud config set project devops-test-project-12345 gcloud config set compute/zone us-central1-a
יוצרים קטגוריה חדשה של Cloud Storage לחבילות אפליקציות:
gcloud storage buckets create gs://$(gcloud config get-value core/project)-artifacts
אם אתם לא רוצים לשמור את חבילות האפליקציות של כל הגרסאות, כדאי להגדיר כלל של מחזור חיים של אובייקטים כדי למחוק קבצים שעברו גיל מסוים.
הגדרה של חשבון שירות ל-Azure Pipelines
יוצרים Google Cloud חשבון שירות ש-Azure Pipelines יכול להשתמש בו כדי לגשת לפרויקט Google Cloud .
יוצרים חשבון שירות ל-Azure Pipelines:
AZURE_PIPELINES_SERVICE_ACCOUNT=$(gcloud iam service-accounts create azure-pipelines --format "value(email)")מקצים את תפקידי ה-IAM 'צפייה באובייקט אחסון' (
roles/storage.objectViewer) ו'יצירת אובייקטים של אחסון' (roles/storage.objectCreator) לחשבון השירותazure-pipelinesכדי ש-Azure Pipelines יוכל להעלות חבילות של אפליקציות ל-Cloud Storage:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/storage.objectViewer gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/storage.objectCreatorמקצים לחשבון השירות
azure-pipelinesאת התפקיד אדמין Compute (roles/compute.admin) כדי ש-Azure Pipelines יוכל לנהל מכונות וירטואליות:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/compute.adminיוצרים מפתח לחשבון השירות:
gcloud iam service-accounts keys create azure-pipelines-key.json \ --iam-account=$AZURE_PIPELINES_SERVICE_ACCOUNT cat azure-pipelines-key.json | base64 -w 0;echo rm azure-pipelines-key.jsonתצטרכו את המפתח של חשבון השירות באחד מהשלבים הבאים.
הגדרת סביבת הפיתוח
כדי להגדיר את השלבים ב-Azure Pipelines לאוטומציה של הפריסה, צריך להכין את סביבת הפיתוח. ההכנה הזו כוללת יצירה של קבוצת מופעי מכונה מנוהלים שתנהל את המכונות הווירטואליות של שרת האינטרנט. הוא כולל גם יצירה של מאזן עומסים מסוג HTTP.
ב-Cloud Shell, יוצרים חשבון שירות לקבוצת מופעי מכונה מנוהלים:
DEV_SERVICE_ACCOUNT=$(gcloud iam service-accounts create clouddemo-dev --format "value(email)")מקצים לחשבון השירות את התפקיד 'צפייה באובייקט אחסון' ב-IAM (
roles/storage.objectViewer) כדי שמופעי מכונות וירטואליות יוכלו להוריד חבילות של אפליקציות מ-Cloud Storage:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$DEV_SERVICE_ACCOUNT \ --role roles/storage.objectViewerנותנים לחשבון השירות
azure-pipelinesהרשאה להשתמש בחשבון השירותclouddemo-dev:gcloud iam service-accounts add-iam-policy-binding $DEV_SERVICE_ACCOUNT \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/iam.serviceAccountUserיוצרים תבנית של הגדרות מכונה שמשתמשת בקובץ אימג' רגיל של Windows Server 2019 Core. תשתמשו בתבנית הזו רק בהתחלה, כי כל בנייה תיצור תבנית חדשה.
gcloud compute instance-templates create clouddemo-initial \ --machine-type n1-standard-2 \ --image-family windows-2019-core \ --image-project windows-cloud \ --service-account $DEV_SERVICE_ACCOUNT \ --scopes https://www.googleapis.com/auth/devstorage.read_only \ --tags gclb-backendיצירת בדיקת תקינות HTTP. מכיוון שלאפליקציה אין נקודת קצה ייעודית לבדיקת תקינות, אפשר לשלוח שאילתה לנתיב
/.gcloud compute http-health-checks create clouddemo-dev-http \ --check-interval=10s --unhealthy-threshold=10 \ --request-path=/יוצרים קבוצת מופעי מכונה מנוהלים שמבוססת על תבנית המכונה הראשונית. כדי לפשט את התהליך, הפקודות הבאות יוצרות קבוצה של מופעי מכונה מנוהלים באזור. עם זאת, אפשר להשתמש באותה גישה לקבוצות של מכונות מנוהלות ברמה אזורית שמפיצות מכונות וירטואליות ביותר מאזור זמינות אחד.
gcloud compute instance-groups managed create clouddemo-dev \ --template=clouddemo-initial \ --http-health-check=clouddemo-dev-http \ --initial-delay=2m \ --size=1 && \ gcloud compute instance-groups set-named-ports clouddemo-dev --named-ports http:80יוצרים שירות לקצה העורפי של מאזן עומסים שמשתמש בבדיקת תקינות HTTP ובקבוצת מופעי מכונה מנוהלים שיצרתם קודם:
gcloud compute backend-services create clouddemo-dev-backend \ --http-health-checks clouddemo-dev-http \ --port-name http --protocol HTTP --global && \ gcloud compute backend-services add-backend clouddemo-dev-backend \ --instance-group clouddemo-dev --global \ --instance-group-zone=$(gcloud config get-value compute/zone)יוצרים קצה קדמי של מאזן עומסים:
gcloud compute url-maps create clouddemo-dev --default-service clouddemo-dev-backend && \ gcloud compute target-http-proxies create clouddemo-dev-proxy --url-map=clouddemo-dev && \ gcloud compute forwarding-rules create clouddemo-dev-fw-rule --global --target-http-proxy clouddemo-dev-proxy --ports=80
יוצרים כלל חומת אש שמאפשר למאזן העומסים של Google לשלוח בקשות HTTP למופעים שסומנו בתג
gclb-backend. בהמשך תפעילו את התג הזה על מכונות וירטואליות של שירותי אינטרנט.gcloud compute firewall-rules create gclb-backend --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gclb-backend --allow tcp:80
הגדרת סביבת הייצור
הגדרת סביבת הייצור דורשת רצף של שלבים שדומים לאלה של הגדרת סביבת הפיתוח.
ב-Cloud Shell, יוצרים בדיקת תקינות HTTP:
gcloud compute http-health-checks create clouddemo-prod-http \ --check-interval=10s --unhealthy-threshold=10 \ --request-path=/יוצרים עוד קבוצת מופעי מכונה מנוהלים שמבוססת על תבנית של הגדרות מכונה הראשונית שיצרתם קודם:
gcloud compute instance-groups managed create clouddemo-prod \ --template=clouddemo-initial \ --http-health-check=clouddemo-prod-http \ --initial-delay=2m \ --size=1 && \ gcloud compute instance-groups set-named-ports clouddemo-prod --named-ports http:80יוצרים שירות לקצה העורפי של מאזן עומסים שמשתמש בבדיקת תקינות HTTP ובקבוצת מופעי מכונה מנוהלים שיצרתם קודם:
gcloud compute backend-services create clouddemo-prod-backend --http-health-checks clouddemo-prod-http --port-name http --protocol HTTP --global && \ gcloud compute backend-services add-backend clouddemo-prod-backend --instance-group clouddemo-prod --global --instance-group-zone=$(gcloud config get-value compute/zone)
יוצרים קצה קדמי של מאזן עומסים:
gcloud compute url-maps create clouddemo-prod --default-service clouddemo-prod-backend && \ gcloud compute target-http-proxies create clouddemo-prod-proxy --url-map=clouddemo-prod && \ gcloud compute forwarding-rules create clouddemo-prod-fw-rule --global --target-http-proxy clouddemo-prod-proxy --ports=80
הגדרת צינור עיבוד הנתונים להפצה
יצירת הגדרה חדשה של גרסה:
- בתפריט Azure DevOps, בוחרים באפשרות Pipelines > Releases.
- לוחצים על New pipeline (צינור חדש).
- ברשימת התבניות, בוחרים באפשרות Empty job (משימה ריקה).
- כשמתבקשים להזין שם לשלב, מזינים
Publish. - בחלק העליון של המסך, נותנים שם לגרסה
clouddemo-ComputeEngine. - בתרשים של צינור הנתונים, לצד Artifacts (פריטי מידע), לוחצים על Add (הוספה).
לוחצים על Build (בנייה) ומוסיפים את ההגדרות הבאות:
- מקור: בוחרים את מאגר ה-Git שמכיל את הקובץ
azure-pipelines.yml. - גרסת ברירת מחדל:
Latest - כינוי של המקור:
CloudDemo.Web
- מקור: בוחרים את מאגר ה-Git שמכיל את הקובץ
לוחצים על הוספה.
בתיבה Artifact (ארטיפקט), לוחצים על Continuous deployment trigger (הסמל של חץ ברק) כדי להוסיף טריגר לפריסה.
בקטע Continuous deployment trigger (טריגר לפריסה רציפה), מעבירים את המתג למצב Enabled (מופעל).
לוחצים על Save.
אם רוצים, כותבים תגובה ומאשרים בלחיצה על אישור.
עכשיו צינור המכירות נראה כך:
פרסום ב-Cloud Storage
אחרי שיצרתם את הגדרת הגרסה, אתם יכולים להוסיף את השלבים לפרסום חבילת האפליקציה ב-Cloud Storage.
- ב-Azure Pipelines, עוברים לכרטיסייה Tasks (משימות).
- לוחצים על Agent job ומגדירים את ההגדרות הבאות:
- מאגר סוכנים: Azure Pipelines
- Agent specification: ubuntu-latest
- לצד Agent job, לוחצים על Add a task to agent job .
- בוחרים את משימת bash ולוחצים על הוספה.
לוחצים על המשימה שנוספה ומגדירים את ההגדרות הבאות:
- שם לתצוגה:
Publish to Cloud Storage - Type: inline
סקריפט:
cat << "EOF" > CloudDemo.Mvc.deploy.ps1 $ErrorActionPreference = "Stop" # Download application package from Cloud Storage gcloud storage cp gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).zip $env:TEMP\app.zip # Install IIS Enable-WindowsOptionalFeature -Online -FeatureName ` NetFx4Extended-ASPNET45, ` IIS-WebServerRole, ` IIS-WebServer, ` IIS-CommonHttpFeatures, ` IIS-HttpErrors, ` IIS-HttpRedirect, ` IIS-ApplicationDevelopment, ` IIS-HealthAndDiagnostics, ` IIS-HttpLogging, ` IIS-LoggingLibraries, ` IIS-RequestMonitor, ` IIS-HttpTracing, ` IIS-Security, ` IIS-RequestFiltering, ` IIS-Performance, ` IIS-WebServerManagementTools, ` IIS-IIS6ManagementCompatibility, ` IIS-Metabase, ` IIS-DefaultDocument, ` IIS-ApplicationInit, ` IIS-NetFxExtensibility45, ` IIS-ISAPIExtensions, ` IIS-ISAPIFilter, ` IIS-ASPNET45, ` IIS-HttpCompressionStatic # Extract application package to wwwroot New-Item -ItemType directory -Path $env:TEMP\app Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\app.zip", "$env:TEMP\app") Remove-Item $env:TEMP\app.zip Move-Item -Path $(dir -recurse $env:TEMP\app\**\PackageTmp | % { $_.FullName }) -Destination c:\inetpub\wwwroot\app -force # Configure IIS web application pool and application Import-Module WebAdministration New-WebAppPool clouddemo-net4 Set-ItemProperty IIS:\AppPools\clouddemo-net4 managedRuntimeVersion v4.0 New-WebApplication -Name clouddemo -Site 'Default Web Site' -PhysicalPath c:\inetpub\wwwroot\app -ApplicationPool clouddemo-net4 # Grant read/execute access to the application pool user &icacls C:\inetpub\wwwroot\app\ /grant "IIS AppPool\clouddemo-net4:(OI)(CI)(RX)" EOF gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) gcloud storage cp $(System.ArtifactsDirectory)/CloudDemo.Web/CloudDemo.Web/CloudDemo.Mvc.zip gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).zip gcloud storage cp CloudDemo.Mvc.deploy.ps1 gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1
הסקריפט הזה מבצע את הפעולות הבאות:
- יוצר סקריפט לטעינה בזמן ההפעלה שמגדיר את IIS.
- מגדירה את Google Cloud CLI כך שישתמש במפתח של חשבון השירות מתוך משתנה הסביבה כדי לבצע אימות ל- Google Cloud.
- העלאה של חבילת האפליקציה ושל סקריפט לטעינה בזמן ההפעלה ל-Cloud Storage.
- שם לתצוגה:
עוברים לכרטיסייה משתנים ומוסיפים את המשתנים הבאים.
שם ערך Secret ServiceAccountKeyנוצר מפתח לחשבון השירות azure-pipelines-deployerקודם לכן.כן CloudDemo.ProjectIdמזהה הפרויקט של Google Cloud הפרויקט. CloudDemo.Zoneהאזור שציינתם קודם כשמריצים את gcloud config set compute/zone(לדוגמה,us-central1-a)לוחצים על Save.
אם רוצים, כותבים תגובה ומאשרים בלחיצה על אישור.
פריסת סביבת הפיתוח
עכשיו אפשר להוסיף את השלבים להפעלת פריסה מתגלגלת לסביבת הפיתוח.
- ב-Azure Pipelines, עוברים לכרטיסייה Pipeline.
- בתיבה שלבים, בוחרים באפשרות הוספה > שלב חדש.
- ברשימת התבניות, בוחרים באפשרות Empty job (משימה ריקה).
- כשמתבקשים להזין שם לשלב, מזינים
Dev. - לוחצים על סמל הברק של השלב החדש שנוצר.
מגדירים את ההגדרות הבאות:
- Select trigger (בחירת טריגר):
After stage - שלבים:
Publish
- Select trigger (בחירת טריגר):
מעבירים את העכבר מעל הכרטיסייה משימות ולוחצים על משימות > פיתוח.
לוחצים על Agent job ומגדירים את ההגדרות הבאות:
- מאגר סוכנים: Azure Pipelines
- Agent specification: ubuntu-latest
לצד Agent job, לוחצים על Add a task to agent job .
בוחרים את משימת bash ולוחצים על הוספה.
לוחצים על המשימה שנוספה ומגדירים את ההגדרות הבאות:
- שם לתצוגה:
Rolling deploy - Type: inline
סקריפט:
INSTANCE_TEMPLATE=clouddemo-$(Build.BuildId)-$(Release.ReleaseId) gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) gcloud compute instance-templates create $INSTANCE_TEMPLATE \ --machine-type n1-standard-2 \ --image-family windows-2019-core \ --image-project windows-cloud \ --service-account clouddemo-dev@$(CloudDemo.ProjectId).iam.gserviceaccount.com \ --scopes https://www.googleapis.com/auth/devstorage.read_only \ --tags gclb-backend \ --metadata sysprep-specialize-script-url=gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1 \ --project $(CloudDemo.ProjectId) \ gcloud compute instance-groups managed set-instance-template clouddemo-dev \ --template $INSTANCE_TEMPLATE \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone) gcloud compute instance-groups managed rolling-action start-update clouddemo-dev \ --version template=$INSTANCE_TEMPLATE \ --type proactive \ --max-unavailable 0 \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone)
הסקריפט הזה מבצע את הפעולות הבאות:
- מגדירה את Google Cloud CLI כך שישתמש במפתח של חשבון השירות מתוך משתנה הסביבה כדי לבצע אימות ל- Google Cloud.
- יוצר תבנית חדשה של הגדרות מכונה שמשתמשת בסקריפט ההפעלה שנוצר בשלב הקודם.
- מעדכנים את קבוצת המופעים הקיימת כך שתשתמש בתבנית החדשה של המופעים. הערה: הפקודה הזו לא גורמת עדיין להחלפה או לעדכון של אף אחת מהמכונות הווירטואליות הקיימות. במקום זאת, הוא מוודא שכל מכונות ה-VM העתידיות בקבוצת המופעים הזו ייצרו מהתבנית החדשה.
- מתחילים עדכון בהדרגה (rolling), שגורם לקבוצת המכונות הקיימת להחליף מכונות וירטואליות קיימות במכונות וירטואליות חדשות, באופן מתגלגל.
- שם לתצוגה:
לוחצים על Save.
אם רוצים, כותבים הערה ומאשרים בלחיצה על אישור.
פריסת סביבת הייצור
לבסוף, צריך להגדיר את הפריסה בסביבת הייצור.
- ב-Azure Pipelines, עוברים לכרטיסייה Pipeline.
- בתיבה שלבים, בוחרים באפשרות הוספה > שלב חדש.
- ברשימת התבניות, בוחרים באפשרות Empty job (משימה ריקה).
- כשמתבקשים להזין שם לשלב, מזינים
Prod. - לוחצים על סמל הברק של השלב החדש שנוצר.
מגדירים את ההגדרות הבאות:
- Select trigger (בחירת טריגר):
After stage - שלבים:
Dev - אישורים לפני פריסה: (מופעל)
- מאשרים: בוחרים את שם המשתמש שלכם.
- Select trigger (בחירת טריגר):
מעבירים את העכבר מעל הכרטיסייה משימות ולוחצים על משימות > Prod.
לוחצים על Agent job ומגדירים את ההגדרות הבאות:
- מאגר סוכנים: Azure Pipelines
- Agent specification: ubuntu-latest
לצד Agent job, לוחצים על Add a task to agent job כדי להוסיף שלב לשלב.
בוחרים את משימת bash ולוחצים על הוספה.
לוחצים על המשימה שנוספה ומגדירים את ההגדרות הבאות:
- שם לתצוגה:
Rolling deploy - Type: inline
סקריפט:
INSTANCE_TEMPLATE=clouddemo-$(Build.BuildId)-$(Release.ReleaseId) gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) gcloud compute instance-templates create $INSTANCE_TEMPLATE \ --machine-type n1-standard-2 \ --image-family windows-2019-core \ --image-project windows-cloud \ --service-account clouddemo-prod@$(CloudDemo.ProjectId).iam.gserviceaccount.com \ --scopes https://www.googleapis.com/auth/devstorage.read_only \ --tags gclb-backend \ --metadata sysprep-specialize-script-url=gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1 \ --project $(CloudDemo.ProjectId) \ gcloud compute instance-groups managed set-instance-template clouddemo-prod \ --template $INSTANCE_TEMPLATE \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone) gcloud compute instance-groups managed rolling-action start-update clouddemo-prod \ --version template=$INSTANCE_TEMPLATE \ --type proactive \ --max-unavailable 0 \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone)
- שם לתצוגה:
לוחצים על Save.
אם רוצים, כותבים הערה ומאשרים בלחיצה על אישור.
הרצת צינור עיבוד הנתונים
אחרי שהגדרתם את כל צינור העיבוד, אתם יכולים לבדוק אותו על ידי ביצוע שינוי בקוד המקור:
- במחשב המקומי, פותחים את הקובץ
applications\clouddemo\net4\CloudDemo.Mvc\Views\Home\Index.cshtmlממאגר Git ששיבטתם קודם. - הערך של
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 , בוחרים באפשרות Network Services (שירותי רשת) > Load balancing (איזון עומסים) > clouddemo-dev.
שימו לב לכתובת ה-IP של חזית האתר.
פותחים חלון חדש בדפדפן ועוברים לכתובת הבאה:
http://IP_ADDRESS/clouddemo/
כאשר
IP_ADDRESSהיא כתובת ה-IP של חזית האתר.שימו לב שהאפליקציה נפרסה ושהיא משתמשת בכותרת המותאמת אישית.
יכול להיות שתראו שגיאה בהתחלה כי מאזן העומסים יהיה זמין רק אחרי כמה דקות.
ב-Azure Pipelines, לוחצים על הלחצן Approve (אישור) שנמצא מתחת לשלב Prod (ייצור) כדי להעביר את הפריסה לסביבת הייצור.
אם הלחצן לא מופיע, יכול להיות שצריך קודם לאשר או לדחות גרסה קודמת.
אם רוצים, כותבים תגובה ואז לוחצים על אישור.
מחכים שהסטטוס של סביבת הייצור ישתנה להצלחה.
במסוף Google Cloud , בוחרים באפשרות Network Services > Load balancing > clouddemo-prod.
שימו לב לכתובת ה-IP של חזית האתר.
פותחים חלון חדש בדפדפן ועוברים לכתובת הבאה:
http://IP_ADDRESS/clouddemo/
כאשר
IP_ADDRESSהיא כתובת ה-IP של חזית האתר.שימו לב שהאפליקציה נפרסה ושהיא משתמשת בכותרת המותאמת אישית.
הסרת המשאבים
כדי להימנע מחיובים נוספים אחרי שתסיימו את המדריך הזה, מומלץ למחוק את הישויות שיצרתם.
מחיקת הפרויקט ב-Azure Pipelines
כדי למחוק את פרויקט Azure Pipelines, אפשר לעיין במסמכי Azure DevOps Services. מחיקת הפרויקט ב-Azure Pipelines תגרום לאובדן של כל השינויים בקוד המקור.
מחיקת הפרויקטים Google Cloud של הפיתוח והייצור
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- שיטות מומלצות לניהול תמונות
- איך פורסים קבוצת SQL Server עם זמינות גבוהה ב-Compute Engine
- מידע נוסף על .NET ב-Google Cloud Platform
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.