Menyebarkan kontainer kustom ke Azure App Service dengan Azure Pipelines

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Dengan menggunakan Azure Pipelines, Anda dapat membangun, menguji, dan secara otomatis menyebarkan aplikasi web Anda ke kontainer Azure App Service Web App di Linux. Dalam artikel ini, Anda akan mempelajari cara menggunakan alur YAML atau Klasik untuk:

  • Membuat dan menerbitkan gambar Docker ke Azure Container Registry
  • Membuat Azure Web App
  • Menyebarkan kontainer ke Azure App Service
  • Menyebarkan ke slot penyebaran

Prasyarat

Mendapatkan kode

Fork aplikasi sampel berikut di GitHub.

https://github.com/spring-guides/gs-spring-boot-docker.git

Membuat dan menerbitkan gambar Docker ke Azure Container Registry

Agar bagian ini berhasil diselesaikan, Anda harus memiliki Azure Container Registry. Lihat bagian prasyarat untuk detailnya.

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

  2. Pilih Alur, lalu Alur Baru.

  3. Pilih GitHub saat dimintai lokasi kode sumber Anda, lalu pilih repositori Anda.

  4. Pilih Docker: buat dan dorong gambar ke templat alur Azure Container Registry.

    Pilih templat alur Docker

  5. Pilih langganan Azure Anda, lalu pilih Lanjutkan.

  6. Pilih registri Kontainer Anda dari menu drop-down, lalu pilih Validasi dan konfigurasikan.

    Memvalidasi dan mengonfigurasi Docker

  7. Tinjau templat YAML alur, lalu pilih Simpan dan jalankan untuk membangun dan menerbitkan gambar Docker ke Azure Container Registry Anda.

    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
        # Container registry service connection established during pipeline creation
        dockerRegistryServiceConnection: '{{ containerRegistryConnection.Id }}'
        imageRepository: 'javascriptdocker'
        containerRegistry: 'sampleappcontainerregistry.azurecr.io'
        dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
        tag: '$(Build.BuildId)'
    
        # Agent VM image name
        vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
        displayName: Build and push stage
        jobs:
        - job: Build
        displayName: Build
        pool:
            vmImage: $(vmImageName)
        steps:
        - task: Docker@2
            displayName: Build and push an image to container registry
            inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
                $(tag)
    
  8. Untuk melihat gambar Docker yang diterbitkan setelah eksekusi alur Anda selesai, navigasikan ke registri kontainer Anda di portal Azure, lalu pilih Repositori.

    Gambar Docker diterbitkan ke Azure Container Registry

  9. Untuk menyebarkan gambar Anda dari registri kontainer, Anda harus mengaktifkan akun pengguna admin. Navigasikan ke registri kontainer Anda di portal Azure, dan pilih Kunci akses. Selanjutnya, pilih tombol alih untuk Mengaktifkan pengguna Admin.

    Aktifkan pengguna Admin

Membuat sebuah Aplikasi Web

  1. Navigasi ke portal Azure.

  2. Pilih Buat Kontainer sumber daya>, lalu pilih Aplikasi Web untuk Kontainer.

    Membuat aplikasi web untuk sumber daya kontainer

  3. Masukkan nama untuk aplikasi web baru Anda, dan buat Grup Sumber Daya baru. Pilih Linux untuk Sistem Operasi.

    Mengonfigurasi aplikasi web

  4. Di bagian Paket harga, pilih paket F1 Gratis.

  5. Pilih Tinjau dan buat. Tinjau konfigurasi Anda, dan pilih Buat setelah selesai.

Menyebarkan ke Aplikasi Web untuk Kontainer

Dalam YAML ini, Anda membuat dan mendorong gambar Docker ke registri kontainer lalu menyebarkannya ke Azure Web App for Containers. Pada tahap Build, Anda membuat dan mendorong gambar Docker ke Azure Container Registry dengan tugas Docker@2. Tugas AzureWebAppContainer@1 menyebarkan gambar ke Aplikasi Web untuk Kontainer.


trigger:
- main

resources:
- repo: self

variables: 
  ## Add this under variables section in the pipeline
  azureSubscription: <Name of the Azure subscription>
  appName: <Name of the Web App>
  containerRegistry: <Name of the Azure container registry>
  dockerRegistryServiceConnection: '4fa4efbc-59af-4c0b-8637-1d5bf7f268fc'
  imageRepository: <Name of image repository>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)


    ## Add the below snippet at the end of your pipeline
    - task: AzureWebAppContainer@1
      displayName: 'Azure Web App on Container Deploy'
      inputs:
        azureSubscription: $(azureSubscription)
        appName: $(appName)
        containers: $(containerRegistry)/$(imageRepository):$(tag)

Menyebarkan ke slot penyebaran

Anda dapat mengonfigurasi kontainer Azure Web App untuk memiliki beberapa slot. Slot memungkinkan Anda menyebarkan aplikasi dengan aman dan mengujinya sebelum menyediakannya kepada pelanggan Anda. Lihat Membuat lingkungan penahapan untuk detail selengkapnya.

Cuplikan YAML berikut menunjukkan cara menyebarkan ke slot pentahapan, lalu bertukar ke slot produksi:

- task: AzureWebAppContainer@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the web app>'
    containers: $(containerRegistry)/$(imageRepository):$(tag)
    deployToSlotOrASE: true
    resourceGroupName: '<Name of the resource group>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true

FAQ

T: Bagaimana cara menemukan kredensial registri Docker saya?

A: Navigasi ke portal Azure, lalu pilih Aplikasi Web Anda untuk Kontainer. Pilih Pengaturan Aplikasi Konfigurasi>lalu klik untuk menampilkan nilai.

Cuplikan layar memperlihatkan cara menemukan kredensial registri Docker.