Bagikan melalui


Menyebarkan ke Azure App Service dengan menggunakan Azure Pipelines

Layanan | Azure DevOps Server 2022

Artikel ini menjelaskan cara menggunakan Azure Pipelines untuk membuat, menguji, dan menyebarkan aplikasi web Anda secara otomatis ke Azure App Service. Anda dapat menyiapkan alur integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang berjalan setiap kali Anda memeriksa perubahan kode ke cabang repositori yang ditunjuk.

Alur terdiri dari tahapan, pekerjaan, dan langkah-langkah. Langkah adalah blok penyusun terkecil dari alur dan dapat menjadi skrip atau tugas, yang merupakan skrip yang dikemas sebelumnya. Untuk informasi selengkapnya tentang konsep dan komponen utama yang membentuk alur, lihat Konsep Alur Azure Utama.

Anda dapat menggunakan tugas Azure Web App di alur Anda untuk disebarkan ke App Service. Untuk skenario yang lebih kompleks, seperti menggunakan parameter XML dalam penyebaran, Anda dapat menggunakan tugas penyebaran Azure App Service .

Prasyarat

Penting

Selama prosedur GitHub, Anda mungkin diminta untuk membuat koneksi layanan GitHub atau dialihkan ke GitHub untuk masuk, menginstal aplikasi Azure Pipelines GitHub, mengotorisasi Azure Pipelines, atau mengautentikasi ke organisasi GitHub. Ikuti instruksi di layar untuk menyelesaikan proses yang diperlukan. Untuk informasi selengkapnya, lihat Akses ke repositori GitHub.

Membuat alur

Contoh kode di bagian ini adalah untuk aplikasi web ASP.NET Core. Anda dapat menyesuaikan instruksi untuk kerangka kerja lain. Untuk informasi selengkapnya tentang dukungan ekosistem Azure Pipelines, lihat Contoh ekosistem Azure Pipelines.

Tentukan alur dengan membuat file YAML azure-pipelines.yml di repositori kode Anda.

  1. Di menu navigasi kiri untuk proyek Azure DevOps Anda, pilih Alur.
  2. Pada halaman Alur , pilih Alur baru, atau Buat alur jika alur ini adalah yang pertama dalam proyek.
  3. Pada layar Di mana kode Anda , pilih lokasi kode sumber Anda, baik Azure Repos Git atau GitHub. Jika perlu, masuk ke GitHub.
  4. Pada layar Pilih repositori , pilih repositori kode Anda.
  5. Pada layar Konfigurasikan alur Anda, pilih Alur pemula.

Tambahkan tugas .NET Core (DotNetCoreCLI@2) ke alur, dan buat dan terbitkan aplikasi Anda.

  1. Pada layar Tinjau YAML alur Anda , hapus semua kode setelah steps: baris.
  2. Pilih akhir file, lalu pilih Perlihatkan asisten di sebelah kanan.
  3. Di bawah Tugas, pilih .NET Core.
  4. Pada layar konfigurasi .NET Core , di bawah Koneksi Azure Resource Manager, pilih langganan Azure Anda, lalu pilih Otorisasi untuk membuat koneksi layanan yang diperlukan.
  5. Di bawah Perintah, pilih terbitkan.
  6. Pastikan bahwa kotak centang Terbitkan proyek web dan proyek yang diterbitkan Zip dipilih, lalu pilih Tambahkan.
  7. Tugas muncul di alur YAML Anda. Tinjau kode YAML untuk melihat apa yang dilakukannya. Setelah siap, pilih Simpan dan jalankan, lalu pilih Simpan dan jalankan lagi.
  8. Pada layar Ringkasan build, di bawah Pekerjaan, pilih tautan Izin yang diperlukan . Pada layar Pemeriksaan , pilih Izinkan, lalu pilih Izinkan lagi. Memberikan izin di sini mengizinkan penggunaan koneksi layanan yang Anda otorisasi untuk semua eksekusi alur ini.

Alur menerbitkan file ZIP penyebaran sebagai artefak Azure untuk tugas penyebaran yang akan digunakan pada langkah berikutnya.

Menambahkan tugas penyebaran

Setelah alur berhasil dijalankan, tambahkan tugas penyebaran.

  1. Pada layar Ringkasan eksekusi alur, pilih ikon Tindakan lainnya di kanan atas, lalu pilih Edit alur.
  2. Pilih akhir file YAML, dan pilih Perlihatkan asisten jika daftar Tugas tidak ditampilkan.
  3. Di daftar Tugas , cari dan pilih tugas Azure Web App . Atau, Anda dapat menggunakan tugas penyebaran Azure App Service .
  4. Pada layar konfigurasi Azure Web App , di bawah Langganan Azure, pilih koneksi layanan yang sama dengan yang Anda siapkan untuk langkah sebelumnya. Anda tidak perlu mengotorisasi ulang koneksi ini.
  5. Untuk Jenis aplikasi, pilih Azure Web App di Linux atau Azure Web App di Windows, bergantung pada kode Anda.
  6. Untuk Nama aplikasi, pilih atau masukkan nama aplikasi App Service Anda.
  7. Pilih Tambahkan.
  8. Pilih Validasi dan simpan, lalu pilih Simpan.
  9. Pilih Jalankan, lalu pilih Jalankan lagi.

Alur YAML lengkap akan terlihat seperti kode berikut:

trigger:
- <branch-specification>

pool:
  vmImage: <agent-specification>

steps:
- task: DotNetCoreCLI@2
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    command: 'publish'
    publishWebProjects: true

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    appType: 'webApp'
    appName: '<your-app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    deploymentMethod: 'auto'  
  • azureSubscription: Nama koneksi layanan resmi ke langganan Azure Anda.
  • appName: Nama aplikasi Anda yang sudah ada.
  • package: Jalur file ke paket atau folder yang berisi konten App Service Anda. Penggunaan wildcard didukung.

Examples

Bagian berikut membahas pembuatan berbagai jenis alur build dan rilis.

Menyebarkan ke aplikasi virtual

Tugas Azure Web App disebarkan ke aplikasi akar di aplikasi web Azure. Anda dapat menyebarkan ke aplikasi virtual tertentu dengan menggunakan VirtualApplication properti tugas penyebaran Azure App Service .

- task: AzureRmWebAppDeployment@5
  inputs:
    VirtualApplication: '<name of virtual application>'

VirtualApplication adalah nama aplikasi virtual yang dikonfigurasi di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Mengonfigurasi aplikasi App Service di portal Microsoft Azure.

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>'
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: Koneksi layanan Azure Anda.
  • appType: Jenis aplikasi opsional seperti webAppLinux untuk menyebarkan ke aplikasi web di Linux.
  • appName: Nama aplikasi Anda yang sudah ada.
  • deployToSlotOrASE:Boolean. Apakah akan menyebarkan ke slot penyebaran yang ada atau lingkungan App Service.
  • resourceGroupName: Nama grup sumber daya yang akan disebarkan, diperlukan jika deployToSlotOrASE benar.
  • slotName: Nama slot yang akan disebarkan, diperlukan jika deployToSlotOrASE benar. Secara default menjadi production.
  • package: Jalur file ke paket atau folder yang berisi konten aplikasi Anda. Penggunaan wildcard didukung.
  • SourceSlot: Slot yang dikirim ke produksi ketika SwapWithProduction bernilai benar.
  • SwapWithProduction:Boolean. Apakah akan menukar lalu lintas slot sumber dengan produksi.

Menyebarkan ke beberapa aplikasi web

Anda dapat menggunakan pekerjaan dalam file YAML Untuk menyiapkan alur penyebaran. Dengan menggunakan tugas-tugas, 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'

Menyebarkan secara kondisional

Untuk menyebarkan secara kondisional di YAML, gunakan salah satu teknik berikut:

  • Tambahkan kondisi ke langkah tersebut.
  • Pisahkan langkah-langkah penyebaran menjadi tugas terpisah, dan tambahkan kondisi ke tugas tersebut.

Contoh berikut menunjukkan cara menggunakan kondisi langkah untuk menyebarkan hanya build yang berhasil yang berasal dari cabang utama:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

Untuk informasi selengkapnya tentang kondisi, lihat Menentukan kondisi.

Menyebarkan menggunakan Web Deploy

Tugas penyebaran Azure App Service dapat disebarkan ke App Service dengan 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@5
  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 tugas AzureWebApp dan AzureRmWebAppDeployment?

Tugas Azure Web App adalah cara paling sederhana untuk menyebarkan ke aplikasi web Azure. Secara default, Anda menyebarkan aplikasi akar di aplikasi web Azure.

Tugas penyebaran Azure App Service dapat menangani lebih banyak skenario kustom, seperti:

Catatan

Tugas Transformasi File terpisah juga mendukung transformasi file dan substitusi variabel 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.

Mengapa saya mendapatkan pesan "Paket App Service tidak valid atau jalur folder yang disediakan"?

Di alur YAML, mungkin ada ketidakcocokan antara tempat paket web bawaan Anda disimpan dan di mana tugas penyebaran mencarinya. Tugas AzureWebApp default mengambil paket web untuk penyebaran dari $(System.DefaultWorkingDirectory)/**/*.zip. Jika paket web didepositkan di tempat lain, ubah nilai package parameter.

Mengapa 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 parameter YAML vmImage Anda menentukan Windows.

pool:
  vmImage: windows-latest

Mengapa Web Deploy tidak berfungsi saat saya menonaktifkan autentikasi dasar?

Untuk informasi pemecahan masalah tentang mendapatkan autentikasi ID Microsoft Entra agar berfungsi dengan tugas penyebaran Azure App Service , lihat Saya tidak dapat Menyebarkan Web ke Azure App Service saya menggunakan autentikasi ID Microsoft Entra dari agen Windows saya.