Bagikan melalui


Menyebarkan ke Azure App Service dengan menggunakan Azure Pipelines

Layanan Azure DevOps | Azure DevOps Server 2020 | Azure DevOps Server 2019

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 dan pengiriman berkelanjutan (CI/CD) dengan menggunakan Azure DevOps.

Alur YAML didefinisikan dengan 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 menggunakan tugas Azure Web App (AzureWebApp) untuk menyebarkan ke Azure App Service dalam pipeline Anda. Untuk skenario yang lebih rumit, seperti saat Anda perlu menggunakan parameter XML dalam penyebaran, Anda dapat menggunakan tugas AzureRmWebAppDeploymentpenyebaran Azure App Service .

Prasyarat:

1. Buat alur untuk tumpukan Anda

Contoh kode di bagian ini mengasumsikan bahwa Anda menyebarkan aplikasi web ASP.NET. Anda dapat menyesuaikan instruksi untuk kerangka kerja lain.

Pelajari lebih lanjut terkait dukungan ekosistem Azure Pipelines.

  1. Masuk ke organisasi Azure DevOps Anda dan buka proyek Anda.

  2. Buka Alur dan pilih Alur Baru.

  3. 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.

  4. Saat daftar repositori muncul, pilih repositori Anda.

  5. Anda mungkin diarahkan ke GitHub untuk menginstal aplikasi Azure Pipelines. Jika demikian, pilih Setujui & instal.

  6. Saat tab Konfigurasi muncul, pilih ASP.NET Core.

  7. Ketika alur baru Anda muncul, periksa YAML untuk melihat apa yang dilakukannya. Saat Anda siap, pilih Simpan dan jalankan.

2. Tambahkan tugas penyebaran

  1. Pilih akhir file YAML, lalu pilih Perlihatkan asisten.

  2. Gunakan Asisten tugas untuk menambahkan tugas aplikasi web Azure .

    Atau, Anda dapat menambahkan tugas deploy Azure App ServiceAzureRmWebAppDeployment.

  3. Pilih langganan Azure Anda. Pastikan untuk memilih Otorisasi untuk mengotorisasi koneksi Anda. Proses otorisasi membuat koneksi layanan yang diperlukan.

  4. 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.
    • package: Jalur file ke paket atau folder yang berisi konten App Service Anda. Penggunaan wildcard didukung.

Contoh: Menyebarkan aplikasi .NET

Untuk menyebarkan paket web .zip (misalnya, dari aplikasi web ASP.NET) ke aplikasi web Azure, 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 aplikasi web Anda.
  • appName: Nama layanan aplikasi Anda yang ada.
  • package: Jalur file ke paket atau folder yang berisi konten App Service Anda. Penggunaan wildcard didukung.

Contoh: Menyebarkan ke aplikasi virtual

Secara default, penyebaran Anda terjadi pada aplikasi akar di aplikasi web Azure. Anda dapat menyebarkan ke aplikasi virtual tertentu dengan menggunakan properti tugas penyebaran Azure App Service VirtualApplicationAzureRmWebAppDeployment:

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

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 ada.
  • deployToSlotOrASE*:Boolean. Menyebarkan ke slot penyebaran yang sudah ada atau Lingkungan Azure App Service.
  • resourceGroupName: Nama grup sumber daya. Diperlukan jika deployToSlotOrASE benar.
  • slotName: Nama slot, yang secara default adalah production. Diperlukan jika deployToSlotOrASE benar.
  • package: Jalur file ke paket atau folder yang berisi konten App Service Anda. Penggunaan wildcard didukung.
  • SourceSlot: Slot yang dikirim ke produksi ketika SwapWithProduction bernilai benar.
  • SwapWithProduction:Boolean. Tukar lalu lintas slot sumber dengan slot produksi.

Contoh: 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'

Contoh: Menyebarkan secara kondisional

Untuk menyebarkan secara kondisional di YAML, Anda dapat menggunakan salah satu teknik berikut:

  • Pisahkan langkah-langkah penyebaran menjadi tugas terpisah, dan tambahkan kondisi ke tugas 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 penerapan Azure App Service AzureRmWebAppDeployment dapat menerapkan 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@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 tugas AzureWebApp dan AzureRmWebAppDeployment?

Tugas AzureWebApp adalah cara paling sederhana untuk menyebarkan ke aplikasi web Azure. Secara default, penyebaran Anda terjadi pada aplikasi akar di aplikasi web Azure.

Tugas Penyebaran Azure App Service (AzureRmWebAppDeployment) dapat menangani lebih banyak skenario kustom, seperti:

Catatan

Tugas Transformasi File terpisah juga mendukung transformasi file dan penggantian 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, 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. Tugas AzureWebApp mungkin terlihat di $(System.DefaultWorkingDirectory)/**/*.zip. Jika paket web didepositkan di tempat lain, ubah nilai package.

Mengapa saya mendapatkan pesan "Terbitkan menggunakan opsi webdeploy hanya didukung saat menggunakan agen Windows"?

Kesalahan ini terjadi dalam AzureRmWebAppDeployment tugas saat Anda mengonfigurasi tugas untuk disebarkan menggunakan Web Deploy, tetapi agen Anda tidak menjalankan Windows. Verifikasi bahwa YAML Anda menyertakan sesuatu yang mirip dengan kode berikut:

pool:
  vmImage: windows-latest

Mengapa Web Deploy tidak berfungsi saat saya menonaktifkan autentikasi dasar?

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