Tutorial ini menunjukkan cara menggunakan Azure Pipelines dan Compute Engine untuk membuat pipeline continuous integration/continuous deployment (CI/CD) untuk aplikasi web ASP.NET MVC. Aplikasi menggunakan Microsoft Internet Information Services dan berjalan di Windows Server.
Pipeline CI/CD menggunakan dua lingkungan terpisah, satu untuk pengujian dan satu untuk produksi.
Di awal pipeline, developer melakukan commit perubahan pada contoh codebase. Tindakan ini akan memicu pipeline untuk membangun aplikasi, mengemasnya sebagai file zip, dan mengupload file zip ke Cloud Storage.
Paket kemudian otomatis dirilis ke lingkungan pengembangan dengan menggunakan update bertahap. Setelah rilis diuji, pengelola rilis dapat mempromosikan rilis tersebut agar di-deploy ke lingkungan produksi.
Tutorial ini ditujukan bagi developer dan engineer DevOps. Anda dianggap memiliki pengetahuan dasar tentang .NET Framework, Windows Server, IIS, Azure Pipelines, dan Compute Engine. Tutorial ini juga mengharuskan Anda memiliki akses administratif ke akun Azure DevOps.
Tujuan
- Gunakan Grup Instance Terkelola Compute Engine untuk menerapkan deployment bertahap.
- Siapkan pipeline CI/CD di Azure Pipelines untuk mengatur proses build, pembuatan, dan deployment.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih sebagai berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Lihat halaman harga Azure DevOps untuk mengetahui biaya yang mungkin berlaku pada penggunaan Azure DevOps.
Sebelum memulai
Biasanya disarankan untuk menggunakan project terpisah untuk workload pengembangan dan produksi sehingga peran dan izin pengelolaan identitas dan akses (IAM) dapat diberikan satu per satu. Demi kesederhanaan, tutorial ini menggunakan satu project untuk lingkungan pengembangan dan produksi.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Enable the Compute Engine and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
- Pastikan Anda memiliki akun Azure DevOps dan memiliki akses administrator ke akun tersebut. Jika belum memiliki akun Azure DevOps, Anda dapat mendaftar di halaman beranda Azure DevOps.
Membuat project Azure DevOps
Anda menggunakan Azure DevOps untuk mengelola kode sumber, menjalankan build dan pengujian, serta mengatur deployment ke Compute Engine. Untuk memulai, Anda membuat project di akun Azure DevOps Anda.
- Buka halaman beranda Azure DevOps (https://dev.azure.com/YOUR_AZURE_DEVOPS_ACCOUNT_NAME).
- Klik New Project.
- Masukkan nama project, seperti
CloudDemo. - Tetapkan Visibilitas ke Pribadi, lalu klik Buat.
- Setelah Anda membuat project, di menu sebelah kiri, klik Repos.
- Klik Impor untuk membuat fork repositori
dotnet-docs-samplesdari GitHub, lalu tetapkan nilai berikut:- Jenis repositori:
Git - URL Clone:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
- Jenis repositori:
Klik Import.
Setelah proses impor selesai, Anda akan melihat kode sumber repositori
dotnet-docs-samples.Di menu, klik Repos > Branches.
Arahkan kursor ke cabang
main. Tombol ... akan muncul di sebelah kanan.Klik ... > Tetapkan sebagai cabang default.
Membangun secara berkelanjutan
Sekarang Anda dapat menggunakan Azure Pipelines untuk menyiapkan pipeline build. Untuk setiap commit yang di-push ke repositori Git, Azure Pipelines akan membangun kode, mengemasnya ke dalam file zip, dan memublikasikan paket yang dihasilkan ke penyimpanan Azure Pipelines internal.
Selanjutnya, Anda mengonfigurasi pipeline rilis yang menggunakan paket dari penyimpanan Azure Pipelines dan men-deploy-nya ke Compute Engine.
Membuat definisi build
Buat definisi build baru di Azure Pipelines yang menggunakan sintaksis YAML:
- Dengan menggunakan Visual Studio atau klien
gitcommand line, clone repositori Git baru Anda. - Di root repositori, buat file bernama
azure-pipelines.yml. Salin kode berikut dan tempel ke dalam file:
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)'
Lakukan commit pada perubahan Anda dan kirimkan ke Azure Pipelines.
Visual Studio
- Buka Team Explorer, lalu klik ikon Home.
- Klik Perubahan.
- Masukkan pesan commit seperti
Add pipeline definition. - Klik Commit All and Push.
Command line
Siapkan semua file yang diubah:
git add -ALakukan perubahan pada repositori lokal:
git commit -m "Add pipeline definition"Kirim perubahan ke Azure DevOps:
git push
Di menu Azure DevOps, pilih Pipelines, lalu klik Create Pipeline.
Pilih Azure Repos Git.
Pilih repositori Anda.
Di halaman Tinjau YAML pipeline Anda, klik Jalankan.
Build baru dipicu. Proses build mungkin memerlukan waktu sekitar 2 menit. Di akhir build, paket aplikasi
CloudDemo.Mvc.zip, yang berisi semua file aplikasi web, tersedia di area penyimpanan artefak Azure Pipelines internal.
Men-deploy secara berkelanjutan
Setelah Azure Pipelines otomatis membangun kode Anda untuk setiap commit, Anda dapat mengalihkan perhatian ke deployment.
Tidak seperti sistem integrasi berkelanjutan lainnya, Azure Pipelines membedakan antara membangun dan men-deploy, serta menyediakan serangkaian alat khusus yang diberi label Pengelolaan Rilis untuk semua tugas terkait deployment.
Pengelolaan Rilis Azure Pipelines dibangun berdasarkan konsep berikut:
- Rilis mengacu pada sekumpulan artefak yang membentuk versi tertentu aplikasi Anda dan biasanya merupakan hasil dari proses build.
- Deployment mengacu pada proses pengambilan rilis dan men-deploy-nya ke lingkungan tertentu.
- Deployment melakukan serangkaian tugas, yang dapat dikelompokkan dalam tugas.
- Tahapan memungkinkan Anda menyegmentasikan pipeline dan dapat digunakan untuk mengatur penerapan ke beberapa lingkungan—misalnya, lingkungan pengembangan dan pengujian.
Anda menyiapkan pipeline rilis agar dipicu setiap kali build baru selesai. Pipeline ini terdiri dari tiga tahap:
- Pada tahap pertama, pipeline mengambil paket aplikasi dari area penyimpanan artefak Azure Pipelines dan memublikasikannya ke bucket Cloud Storage sehingga paket tersebut dapat diakses oleh Compute Engine.
- Pada tahap kedua, pipeline memperbarui lingkungan pengembangan dengan menggunakan update berkelanjutan.
- Pada tahap akhir, setelah persetujuan, pipeline akan memperbarui lingkungan produksi dengan menggunakan update bertahap.
Buat bucket Cloud Storage untuk artefak build
Buat bucket Cloud Storage untuk menyimpan paket aplikasi. Selanjutnya, Anda akan mengonfigurasi Compute Engine sehingga instance VM baru dapat otomatis menarik paket aplikasi dari bucket ini.
- Di konsol Google Cloud , beralihlah ke project yang baru dibuat.
Buka Cloud Shell.
Untuk menghemat waktu, tetapkan nilai default untuk project ID dan zona Compute Engine Anda:
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
Ganti PROJECT_ID dengan ID project Google Cloud Anda, dan ganti ZONE dengan nama zona yang akan Anda gunakan untuk membuat resource. Jika Anda tidak yakin zona mana yang harus dipilih, gunakan
us-central1-a.Contoh:
gcloud config set project devops-test-project-12345 gcloud config set compute/zone us-central1-a
Buat bucket Cloud Storage baru untuk paket aplikasi:
gcloud storage buckets create gs://$(gcloud config get-value core/project)-artifacts
Jika Anda tidak ingin menyimpan paket aplikasi dari semua build, Anda dapat mempertimbangkan untuk mengonfigurasi aturan siklus proses objek untuk menghapus file yang sudah melewati usia tertentu.
Menyiapkan akun layanan untuk Azure Pipelines
Buat Google Cloud akun layanan yang dapat digunakan Azure Pipelines untuk mengakses project Google Cloud Anda.
Buat akun layanan untuk Azure Pipelines:
AZURE_PIPELINES_SERVICE_ACCOUNT=$(gcloud iam service-accounts create azure-pipelines --format "value(email)")Berikan peran IAM Storage Object Viewer (
roles/storage.objectViewer) dan Storage Object Creator (roles/storage.objectCreator) kepada akun layananazure-pipelinesagar Azure Pipelines dapat mengupload paket aplikasi ke 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.objectCreatorBerikan peran Compute Admin (
roles/compute.admin) kepada akun layananazure-pipelinesagar Azure Pipelines dapat mengelola instance VM:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/compute.adminBuat kunci akun layanan:
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.jsonAnda memerlukan kunci akun layanan di salah satu langkah berikut.
Mengonfigurasi lingkungan pengembangan
Sebelum dapat mengonfigurasi langkah-langkah di Azure Pipelines untuk mengotomatiskan deployment, Anda harus menyiapkan lingkungan pengembangan. Persiapan ini mencakup pembuatan grup instance terkelola yang akan mengelola instance VM server web. Panduan ini juga mencakup pembuatan load balancer HTTP.
Di Cloud Shell, buat akun layanan untuk grup instance terkelola:
DEV_SERVICE_ACCOUNT=$(gcloud iam service-accounts create clouddemo-dev --format "value(email)")Berikan peran IAM Storage Object Viewer (
roles/storage.objectViewer) ke akun layanan agar instance VM dapat mendownload paket aplikasi dari Cloud Storage:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$DEV_SERVICE_ACCOUNT \ --role roles/storage.objectViewerBeri akun layanan
azure-pipelinesizin untuk menggunakan akun layananclouddemo-dev:gcloud iam service-accounts add-iam-policy-binding $DEV_SERVICE_ACCOUNT \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/iam.serviceAccountUserBuat template instance yang menggunakan image Windows Server 2019 Core standar. Anda hanya akan menggunakan template ini pada awalnya, karena setiap build akan menghasilkan template baru.
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-backendBuat health check HTTP. Karena aplikasi tidak memiliki endpoint health check khusus, Anda dapat membuat kueri jalur
/.gcloud compute http-health-checks create clouddemo-dev-http \ --check-interval=10s --unhealthy-threshold=10 \ --request-path=/Buat grup instance terkelola yang didasarkan pada template instance awal. Untuk mempermudah, perintah berikut membuat grup instance terkelola zonal. Namun, Anda dapat menggunakan pendekatan yang sama untuk grup instance terkelola regional yang mendistribusikan instance VM di lebih dari satu zona.
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:80Buat layanan backend load balancer yang menggunakan health check HTTP dan grup instance terkelola yang Anda buat sebelumnya:
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)Buat frontend load balancer:
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
Buat aturan firewall yang mengizinkan load balancer Google mengirim permintaan HTTP ke instance yang telah diberi anotasi dengan tag
gclb-backend. Anda akan menerapkan tag ini ke instance VM layanan web nanti.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
Mengonfigurasi lingkungan produksi
Penyiapan lingkungan produksi memerlukan urutan langkah yang serupa dengan langkah-langkah untuk mengonfigurasi lingkungan pengembangan.
Di Cloud Shell, buat health check HTTP:
gcloud compute http-health-checks create clouddemo-prod-http \ --check-interval=10s --unhealthy-threshold=10 \ --request-path=/Buat grup instance terkelola lain yang didasarkan pada template instance awal yang Anda buat sebelumnya:
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:80Buat layanan backend load balancer yang menggunakan health check HTTP dan grup instance terkelola yang Anda buat sebelumnya:
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)
Buat frontend load balancer:
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
Mengonfigurasi pipeline rilis
Buat definisi rilis baru:
- Di menu Azure DevOps, pilih Pipelines > Releases.
- Klik New pipeline.
- Dari daftar template, pilih Empty job.
- Saat Anda diminta untuk memasukkan nama panggung, masukkan
Publish. - Di bagian atas layar, beri nama rilis
clouddemo-ComputeEngine. - Dalam diagram pipeline, di samping Artifacts, klik Add.
Pilih Build dan tambahkan setelan berikut:
- Sumber: Pilih repositori Git yang berisi file
azure-pipelines.yml. - Versi default:
Latest - Alias sumber:
CloudDemo.Web
- Sumber: Pilih repositori Git yang berisi file
Klik Tambahkan.
Di kotak Artefak, klik Pemicu deployment berkelanjutan (ikon petir) untuk menambahkan pemicu deployment.
Di bagian Pemicu deployment berkelanjutan, setel tombol ke Diaktifkan.
Klik Simpan.
Masukkan komentar jika Anda mau, lalu konfirmasi dengan mengklik Oke.
Pipeline sekarang terlihat seperti ini:
Memublikasikan ke Cloud Storage
Setelah membuat definisi rilis, Anda dapat menambahkan langkah-langkah untuk memublikasikan paket aplikasi ke Cloud Storage.
- Di Azure Pipelines, beralihlah ke tab Tasks.
- Klik Agent job dan konfigurasikan setelan berikut:
- Agent pool: Azure Pipelines
- Spesifikasi agen: ubuntu-latest
- Di samping Tugas agen, klik Tambahkan tugas ke tugas agen .
- Pilih tugas bash, lalu klik Add.
Klik tugas yang baru ditambahkan dan konfigurasi setelan berikut:
- Nama tampilan:
Publish to Cloud Storage - Jenis: inline
Skrip:
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
Skrip ini melakukan hal berikut:
- Membuat skrip startup yang mengonfigurasi IIS.
- Mengonfigurasi Google Cloud CLI agar menggunakan kunci akun layanan dari variabel lingkungan untuk mengautentikasi ke Google Cloud.
- Mengupload paket aplikasi dan skrip startup ke Cloud Storage.
- Nama tampilan:
Beralih ke tab Variabel dan tambahkan variabel berikut.
Nama Nilai Secret ServiceAccountKeyKunci akun layanan dibuat untuk azure-pipelines-deployersebelumnya.Ya CloudDemo.ProjectIdProject ID project Google Cloud Anda. CloudDemo.ZoneZona yang Anda tentukan sebelumnya saat menjalankan gcloud config set compute/zone(misalnya,us-central1-a)Klik Simpan.
Masukkan komentar jika Anda mau, lalu konfirmasi dengan mengklik Oke.
Men-deploy lingkungan pengembangan
Sekarang Anda dapat menambahkan langkah-langkah untuk memulai deployment bertahap ke lingkungan pengembangan.
- Di Azure Pipelines, beralihlah ke tab Pipeline.
- Di kotak Stages, pilih Add > New stage.
- Dari daftar template, pilih Empty job.
- Saat Anda diminta untuk memasukkan nama panggung, masukkan
Dev. - Klik ikon petir pada tahap yang baru dibuat.
Konfigurasi setelan berikut:
- Pilih pemicu:
After stage - Tahapan:
Publish
- Pilih pemicu:
Arahkan kursor ke tab Tasks, lalu klik Tasks > Dev.
Klik Agent job dan konfigurasi setelan berikut:
- Agent pool: Azure Pipelines
- Spesifikasi agen: ubuntu-latest
Di samping Tugas agen, klik Tambahkan tugas ke tugas agen .
Pilih tugas bash, lalu klik Add.
Klik tugas yang baru ditambahkan dan konfigurasi setelan berikut:
- Nama tampilan:
Rolling deploy - Jenis: inline
Skrip:
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)
Skrip ini melakukan hal berikut:
- Mengonfigurasi Google Cloud CLI agar menggunakan kunci akun layanan dari variabel lingkungan untuk mengautentikasi ke Google Cloud.
- Membuat template instance baru yang menggunakan skrip startup yang dihasilkan oleh tahap sebelumnya.
- Mengupdate grup instance yang ada untuk menggunakan template instance baru. Perhatikan bahwa perintah ini belum menyebabkan VM yang ada diganti atau diupdate. Sebagai gantinya, tindakan ini memastikan bahwa semua VM mendatang dalam grup instance ini dibuat dari template baru.
- Memulai update berkelanjutan, sehingga grup instance yang ada menggantikan VM yang ada dengan VM baru secara berkelanjutan.
- Nama tampilan:
Klik Simpan.
Masukkan komentar jika Anda mau, lalu konfirmasi dengan mengklik Oke.
Men-deploy lingkungan produksi
Terakhir, Anda perlu mengonfigurasi deployment ke lingkungan produksi.
- Di Azure Pipelines, beralihlah ke tab Pipeline.
- Di kotak Stages, pilih Add > New stage.
- Dari daftar template, pilih Empty job.
- Saat Anda diminta untuk memasukkan nama panggung, masukkan
Prod. - Klik ikon petir pada tahap yang baru dibuat.
Konfigurasi setelan berikut:
- Pilih pemicu:
After stage - Tahapan:
Dev - Persetujuan sebelum deployment: (diaktifkan)
- Pemberi persetujuan: Pilih nama pengguna Anda sendiri.
- Pilih pemicu:
Arahkan kursor ke tab Tasks, lalu klik Tasks > Prod.
Klik Agent job dan konfigurasi setelan berikut:
- Agent pool: Azure Pipelines
- Spesifikasi agen: ubuntu-latest
Di samping Tugas agen, klik Tambahkan tugas ke tugas agen untuk menambahkan langkah ke fase.
Pilih tugas bash, lalu klik Add.
Klik tugas yang baru ditambahkan dan konfigurasi setelan berikut:
- Nama tampilan:
Rolling deploy - Jenis: inline
Skrip:
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)
- Nama tampilan:
Klik Simpan.
Masukkan komentar jika Anda mau, lalu konfirmasi dengan mengklik Oke.
Menjalankan pipeline
Setelah mengonfigurasi seluruh pipeline, Anda dapat mengujinya dengan melakukan perubahan kode sumber:
- Di komputer lokal Anda, buka file
applications\clouddemo\net4\CloudDemo.Mvc\Views\Home\Index.cshtmldari repositori Git yang Anda clone sebelumnya. - Ubah nilai
ViewBag.TitledariHome PagemenjadiThis app runs on GKE. Lakukan commit pada perubahan, lalu kirimkan ke Azure Pipelines.
Visual Studio
- Buka Team Explorer, lalu klik ikon Home.
- Klik Perubahan.
- Masukkan pesan commit seperti
Change site title. - Klik Commit All and Push.
Command line
Siapkan semua file yang diubah:
git add -ALakukan perubahan pada repositori lokal:
git commit -m "Change site title"Kirim perubahan ke Azure Pipelines:
git push
Di menu Azure DevOps, pilih Pipelines.
Build dipicu.
Setelah build selesai, pilih Pipelines > Releases. Proses rilis dimulai.
Klik Release-1 untuk membuka halaman detail, lalu tunggu hingga status tahap Dev berubah menjadi Succeeded.
Di konsol Google Cloud , pilih Network Services > Load balancing > clouddemo-dev.
Catat alamat IP frontend.
Buka jendela browser baru dan buka alamat berikut:
http://IP_ADDRESS/clouddemo/
dengan
IP_ADDRESSadalah alamat IP frontend.Perhatikan bahwa aplikasi telah di-deploy dan menggunakan judul kustom.
Anda mungkin melihat error pada awalnya karena load balancer memerlukan waktu beberapa menit agar tersedia.
Di Azure Pipelines, klik tombol Approve yang ada di bagian Prod stage untuk mempromosikan deployment ke lingkungan produksi.
Jika tidak melihat tombol tersebut, Anda mungkin perlu menyetujui atau menolak rilis sebelumnya terlebih dahulu.
Masukkan komentar jika Anda mau, lalu konfirmasi dengan mengklik Setujui.
Tunggu hingga status lingkungan Prod berubah menjadi Succeeded.
Di Google Cloud konsol, pilih Network Services > Load balancing > clouddemo-prod.
Catat alamat IP frontend.
Buka jendela browser baru dan buka alamat berikut:
http://IP_ADDRESS/clouddemo/
dengan
IP_ADDRESSadalah alamat IP frontend.Perhatikan bahwa aplikasi telah di-deploy dan menggunakan judul kustom.
Pembersihan
Agar tidak menimbulkan biaya lebih lanjut setelah Anda menyelesaikan tutorial ini, hapus entitas yang Anda buat.
Menghapus project Azure Pipelines
Untuk menghapus project Azure Pipelines, lihat dokumentasi Azure DevOps Services. Menghapus project Azure Pipelines akan menyebabkan semua perubahan kode sumber hilang.
Hapus Google Cloud project pengembangan dan produksi
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah berikutnya
- Baca artikel tentang praktik terbaik untuk mengelola gambar.
- Pelajari cara men-deploy grup SQL Server yang sangat tersedia di Compute Engine.
- Baca tentang .NET di Google Cloud Platform.
- Instal Cloud Tools for Visual Studio.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.