Menyebarkan ke App Service dengan menggunakan Azure Pipelines
Azure DevOps | Azure DevOps Server 2020 | Azure DevOps Server 2019
Catatan
Mulai 1 Juni 2024, semua aplikasi App Service yang baru dibuat akan memiliki opsi untuk menghasilkan nama host default yang unik menggunakan konvensi <app-name>-<random-hash>.<region>.azurewebsites.net
penamaan . Nama aplikasi yang ada akan tetap tidak berubah.
Contoh: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Untuk detail lebih lanjut, lihat Nama Host Default Unik untuk Sumber Daya App Service.
Gunakan Azure Pipelines untuk menyebarkan aplikasi web Anda secara otomatis ke Azure App Service pada setiap build yang berhasil. Azure Pipelines memungkinkan Anda membangun, menguji, dan menyebarkan dengan integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD) menggunakan Azure DevOps.
Alur YAML ditentukan menggunakan file YAML di repositori Anda. Langkah adalah blok penyusun terkecil dari alur dan dapat menjadi skrip atau tugas (skrip yang dikemas sebelumnya). Pelajari tentang konsep utama dan komponen yang membentuk sebuah alur.
Anda akan menggunakan tugas Azure Web App (AzureWebApp
) untuk menyebarkan ke Azure App Service di alur Anda. Untuk skenario yang lebih rumit seperti perlu menggunakan parameter XML dalam penyebaran, Anda dapat menggunakan tugas penyebaran Azure App Service (AzureRmWebAppDeployment).
Prasyarat
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Organisasi Azure DevOps. Buat akun gratis.
- Kemampuan untuk menjalankan jaringan alur pada agen yang dihosting Microsoft. Anda dapat membeli pekerjaan paralel atau Anda dapat meminta tingkat gratis.
- Aplikasi Azure App Service yang berfungsi dengan kode yang dihosting di GitHub atau Azure Repos.
1. Buat alur untuk tumpukan Anda
Contoh kode di bagian ini mengasumsikan Anda menyebarkan aplikasi web ASP.NET. Anda dapat menyesuaikan instruksi untuk kerangka kerja lain.
Pelajari lebih lanjut terkait dukungan ekosistem Azure Pipelines.
Masuk ke organisasi Azure DevOps Anda dan arahkan ke proyek Anda.
Buka Alur, lalu pilih Alur baru.
Saat diminta, pilih lokasi kode sumber Anda: Azure Repos Git atau GitHub.
Anda dapat diarahkan ke GitHub untuk masuk. Jika demikian, masukkan informasi masuk GitHub Anda.
Saat daftar repositori muncul, pilih repositori Anda.
Anda mungkin diarahkan ke GitHub untuk menginstal aplikasi Azure Pipelines. Jika demikian, pilih Setujui & instal.
Saat tab Konfigurasi muncul, pilih ASP.NET Core.
Ketika alur baru Anda muncul, tinjau YAML untuk melihat tindakan yang dilakukannya. Saat Anda siap, pilih Simpan dan jalankan.
2. Tambahkan tugas penyebaran
Klik akhir file YAML, lalu pilih Perlihatkan asisten.'
Gunakan asisten Tugas untuk menambahkan tugas Azure Web App.
Atau, Anda dapat menambahkan tugas penyebaran Azure App Service (AzureRmWebAppDeployment).
Pilih langganan Azure Anda. Pastikan untuk Mengotorisasi sambungan Anda. Otorisasi membuat koneksi layanan yang diperlukan.
Pilih Jenis aplikasi, Nama aplikasi, dan Tumpukan Runtime berdasarkan aplikasi App Service Anda. YAML lengkap Anda akan terlihat mirip dengan kode berikut.
variables: buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true - task: AzureWebApp@1 inputs: azureSubscription: '<service-connection-name>' appType: 'webAppLinux' appName: '<app-name>' package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription: Nama koneksi layanan resmi ke langganan Azure Anda.
- appName: Nama aplikasi anda yang sudah ada.
- paket: Jalur file ke paket atau folder yang berisi konten layanan aplikasi Anda. Penggunaan wildcard didukung.
Contoh: Menyebarkan aplikasi .NET
Untuk menyebarkan paket web .zip (misalnya, dari aplikasi web ASP.NET) ke Azure Web App, gunakan cuplikan berikut untuk menyebarkan build ke aplikasi.
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: 'webAppLinux'
appName: '<app-name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription: langganan Azure Anda.
- appType: jenis Web App Anda.
- appName: nama layanan aplikasi Anda yang sudah ada.
- paket: jalur file ke paket atau folder yang berisi konten layanan aplikasi Anda. Penggunaan wildcard didukung.
Contoh: menyebarkan ke aplikasi virtual
Secara default, penyebaran Anda terjadi pada aplikasi root di Azure Web App. Anda dapat menyebarkan ke aplikasi virtual tertentu dengan menggunakan VirtualApplication
properti tugas penyebaran Azure App Service (AzureRmWebAppDeployment
):
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
- VirtualApplication: nama Aplikasi Virtual yang dikonfigurasi dalam portal Azure. Untuk informasi selengkapnya, lihat Mengonfigurasi aplikasi App Service di portal Azure .
Contoh: Menyebarkan ke slot
Contoh berikut menunjukkan cara menyebarkan ke slot penahapan, lalu bertukar ke slot produksi:
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
appName: '<app-name>'
deployToSlotOrASE: true
resourceGroupName: '<name of resource group>'
slotName: staging
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
- azureSubscription: langganan Azure Anda.
- appType: (opsional) Gunakan
webAppLinux
untuk menyebarkan ke Aplikasi Web di Linux. - appName: nama layanan aplikasi Anda yang sudah ada.
- deployToSlotOrASE: Boolean. Menyebarkan ke slot penyebaran yang sudah ada atau Lingkungan Azure App Service.
- resourceGroupName: Nama grup sumber daya. Diperlukan jika
deployToSlotOrASE
true. - slotName: Nama slot, yang default ke
production
. Diperlukan jikadeployToSlotOrASE
true. - paket: jalur file ke paket atau folder yang berisi konten layanan aplikasi Anda. Penggunaan wildcard didukung.
- SourceSlot: Slot dikirim ke produksi ketika
SwapWithProduction
true. - SwapWithProduction: Boolean. Menukar lalu lintas slot sumber dengan produksi.
Contoh: Menyebarkan ke beberapa aplikasi web
Anda dapat menggunakan pekerjaan dalam file YAML Untuk menyiapkan alur penyebaran. Dengan menggunakan pekerjaan, Anda dapat mengontrol urutan penyebaran ke beberapa aplikasi web.
jobs:
- job: buildandtest
pool:
vmImage: ubuntu-latest
steps:
# publish an artifact called drop
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: drop
# deploy to Azure Web App staging
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: <app type>
appName: '<staging-app-name>'
deployToSlotOrASE: true
resourceGroupName: <group-name>
slotName: 'staging'
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- job: deploy
dependsOn: buildandtest
condition: succeeded()
pool:
vmImage: ubuntu-latest
steps:
# download the artifact drop from the previous job
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
artifact: 'drop'
path: '$(Pipeline.Workspace)'
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: <app type>
appName: '<production-app-name>'
resourceGroupName: <group-name>
package: '$(Pipeline.Workspace)/**/*.zip'
Contoh: Membuat substitusi variabel
Untuk sebagian besar bahasa pemrogram, pengaturan aplikasi dan string sambungan dapat diatur sebagai variabel lingkungan saat runtime bahasa umum.
Tetapi ada alasan lain Anda ingin membuat substitusi variabel ke Web.config Anda. Dalam contoh ini, file Web.config Anda berisi string koneksi bernama connectionString
. Anda dapat mengubah nilainya sebelum menyebarkan ke setiap aplikasi web. Anda dapat melakukan tindakan ini baik dengan menerapkan transformasi Web.config atau dengan mengganti variabel dalam file Web.config Anda.
Cuplikan berikut menunjukkan contoh substitusi variabel dengan menggunakan tugas Azure App Service Deploy (AzureRmWebAppDeployment
):
jobs:
- job: test
variables:
connectionString: <test-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Test stage Azure service connection>'
WebAppName: '<name of test stage web app>'
enableXmlVariableSubstitution: true
- job: prod
dependsOn: test
variables:
connectionString: <prod-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Prod stage Azure service connection>'
WebAppName: '<name of prod stage web app>'
enableXmlVariableSubstitution: true
Contoh: Menyebarkan secara kondisional
Untuk melakukan ini di YAML, Anda dapat menggunakan salah satu teknik berikut:
- Isolasi langkah-langkah penyebaran ke dalam pekerjaan terpisah, dan tambahkan kondisi ke pekerjaan tersebut.
- Tambahkan kondisi ke langkah tersebut.
Contoh berikut menunjukkan cara menggunakan kondisi langkah untuk menyebarkan hanya build yang berasal dari cabang utama saja:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
Untuk mempelajari kondisi lebih lanjut, lihat Menentukan kondisi.
Contoh: menyebarkan menggunakan Web Deploy
Tugas penyebaran Azure App Service (AzureRmWebAppDeployment
) dapat disebarkan ke App Service menggunakan Web Deploy.
trigger:
- main
pool:
vmImage: windows-latest
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration)'
zipAfterPublish: true
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
Tanya jawab umum
Apa perbedaan antara AzureWebApp
tugas dan AzureRmWebAppDeployment
?
Tugas Azure Web App (AzureWebApp
) adalah cara paling sederhana untuk menyebarkan ke Azure Web App. Secara default, penyebaran Anda terjadi pada aplikasi root di Azure Web App.
Tugas Penyebaran Azure App Service (AzureRmWebAppDeployment
) dapat menangani lebih banyak skenario kustom, seperti:
- Ubah pengaturan konfigurasi di dalam paket web dan file parameter XML.
- Sebarkan dengan Web Deploy, jika Anda terbiasa dengan proses penyebaran IIS.
- Menyebarkan ke aplikasi virtual.
- Sebarkan ke jenis aplikasi lain, seperti aplikasi Kontainer, aplikasi Fungsi, WebJobs, atau APLIKASI API dan Seluler.
Catatan
Transformasi file dan substitusi variabel juga didukung oleh Tugas Transformasi File terpisah untuk digunakan di Azure Pipelines. Anda dapat menggunakan tugas Transformasi File untuk menerapkan transformasi file dan substitusi variabel pada file konfigurasi dan parameter apa pun.
Saya mendapatkan pesan "Paket App Service tidak valid atau jalur folder yang disediakan."
Di alur YAML, tergantung pada alur Anda, mungkin ada ketidakcocokan antara tempat paket web bawaan Anda disimpan dan di mana tugas penyebaran mencarinya. Misalnya, AzureWebApp
tugas mengambil paket web untuk penyebaran. Misalnya, tugas AzureWebApp terlihat di $(System.DefaultWorkingDirectory)/**/*.zip
. Jika paket web didepositkan di tempat lain, ubah nilai package
.
Saya mendapatkan pesan "Terbitkan menggunakan opsi webdeploy hanya didukung saat menggunakan agen Windows."
Kesalahan ini terjadi dalam tugas AzureRmWebAppDeployment saat Anda mengonfigurasi tugas untuk menyebarkan menggunakan Web Deploy, tetapi agen Anda tidak menjalankan Windows. Verifikasi bahwa YAML Anda memiliki sesuatu yang mirip dengan kode berikut:
pool:
vmImage: windows-latest
Penyebaran Web tidak berfungsi saat saya menonaktifkan autentikasi dasar
Untuk informasi pemecahan masalah tentang mendapatkan autentikasi ID Microsoft Entra untuk bekerja dengan AzureRmWebAppDeployment
tugas, lihat Saya tidak dapat Menyebarkan Web ke Azure App Service saya menggunakan autentikasi ID Microsoft Entra dari agen Windows saya
Langkah berikutnya
- Melakukan kustomisasi Alur Azure DevOps Anda.