Bagikan melalui


Menyebarkan kontainer kustom ke App Service menggunakan Azure Pipelines

Azure DevOps memungkinkan Anda menghosting, membangun, merencanakan, dan menguji kode Anda dengan alur kerja gratis. Menggunakan Azure Pipelines sebagai salah satu alur kerja ini memungkinkan Anda untuk menyebarkan aplikasi Anda dengan CI / CD yang bekerja dengan platform dan cloud apa pun. Alur didefinisikan sebagai file YAML di direktori root repositori Anda.

Dalam artikel ini, kami menggunakan Azure Pipelines untuk menyebarkan aplikasi kontainer Windows ke App Service dari repositori Git di Azure DevOps. Ini mengasumsikan Anda sudah memiliki aplikasi .NET dengan dockerfile pendukung di Azure DevOps.

Prasyarat

Menambahkan Koneksi Layanan

Sebelum membuat alur, Anda harus terlebih dahulu membuat Koneksi Layanan karena Anda akan diminta untuk memilih dan memverifikasi koneksi saat membuat templat Anda. Koneksi Layanan memungkinkan Anda tersambung ke registri pilihan Anda (ACR atau Docker Hub) saat menggunakan templat tugas. Saat menambahkan koneksi layanan baru, pilih opsi Docker Registry. Formulir berikut meminta Anda untuk memilih Docker Hub atau Azure Container Registry bersama dengan informasi yang berkaitan. Untuk mengikuti tutorial ini, gunakan Azure Container Registry. Anda dapat membuat Koneksi Layanan baru dengan mengikuti petunjuk di sini.

Mengamankan rahasia Anda

Karena kami menggunakan informasi sensitif yang tidak ingin diakses orang lain, kami menggunakan variabel untuk melindungi informasi kami. Buat variabel dengan mengikuti petunjuk di sini.

Untuk menambahkan Variabel, Anda mengklik tombol Variabel di samping tombol Simpan di kanan atas tampilan pengeditan untuk alur Anda. Pilih tombol Variabel Baru dan masukkan informasi Anda. Tambahkan variabel di bawah ini dengan rahasia Anda sendiri yang sesuai dari setiap sumber daya.

  • vmImageName: 'windows-latest'
  • imageRepository: 'your-image-repo-name'
  • dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
  • dockerRegistryServiceConnection: 'your-service-connection-number'

Membuat alur baru

Setelah repositori Anda dibuat dengan aplikasi .NET dan mendukung dockerfile, Anda dapat membuat alur dengan mengikuti langkah-langkah ini.

  1. Navigasi ke Alur di bilah menu sebelah kiri dan klik tombol Buat alur
  2. Pada layar berikutnya, pilih Azure Repos Git sebagai opsi repositori Anda dan pilih repositori tempat kode Anda berada
  3. Di bawah tab Konfigurasi, pilih opsi Alur Pemula
  4. Di bawah tab Tinjau berikutnya, klik tombol Simpan

Membangun dan mendorong gambar ke registri kontainer Azure

Setelah alur dibuat dan disimpan, Anda harus mengedit alur untuk menjalankan langkah-langkah untuk membangun kontainer, mendorong ke registri, dan menyebarkan gambar ke App Service. Untuk memulai, navigasikan ke menu Alur , pilih alur yang Anda buat dan klik tombol Edit .

Pertama, Anda perlu menambahkan tugas docker sehingga Anda dapat membangun gambar. Tambahkan kode berikut dan ganti Dockerfile: app/Dockerfile dengan jalur ke Dockerfile Anda.

trigger:
 - main

 pool:
   vmImage: 'windows-latest' 

 variables:
   vmImageName: 'windows-latest'
   imageRepository: 'your-image-repo-name'
   dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
   dockerRegistryServiceConnection: 'your-service-connection-number'

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    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)

Menambahkan tugas penyebaran App Service

Selanjutnya, Anda perlu menyiapkan tugas penyebaran. Ini memerlukan nama langganan, nama aplikasi, dan registri kontainer Anda. Tambahkan tahap baru ke file yaml dengan menempelkan kode di bawah ini.

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:

Selanjutnya, navigasi ke tab Perlihatkan asisten di sudut kanan atas dan temukan tugas penyebaran Azure App Service dan isi formulir berikut:

  • Jenis koneksi: Azure Resource Manager
  • Langganan Azure: nama langganan Anda
  • Jenis App Service: Aplikasi Web untuk Kontainer (Windows)
  • Nama App Service: nama aplikasi Anda
  • Registri atau Namespace layanan: your-azure-container-registry-namespace
  • Gambar: your-azure-container-registry-image-name

Setelah Anda mengisinya, klik tombol Tambahkan untuk menambahkan tugas di bawah ini:

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'my-subscription-name'
    appType: 'webAppHyperVContainer'
    WebAppName: 'my-app-name'
    DockerNamespace: 'myregsitry.azurecr.io'
    DockerRepository: 'dotnetframework:12'

Setelah Anda menambahkan tugas, alur siap dijalankan. Klik tombol Validasi dan simpan dan jalankan alur. Alur melalui langkah-langkah untuk membangun dan mendorong gambar kontainer Windows ke Azure Container Registry dan menyebarkan gambar ke App Service.

Di bawah ini adalah contoh file yaml lengkap:

trigger:
 - main

 pool:
   vmImage: 'windows-latest' 

 variables:
   vmImageName: 'windows-latest'
   imageRepository: 'your-image-repo-name'
   dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
   dockerRegistryServiceConnection: 'your-service-connection-number'

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    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)

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: AzureRmWebAppDeployment@4
		  inputs:
		    ConnectionType: 'AzureRM'
		    azureSubscription: 'my-subscription-name'
		    appType: 'webAppHyperVContainer'
		    WebAppName: 'my-app-name'
		    DockerNamespace: 'myregsitry.azurecr.io'
		    DockerRepository: 'dotnetframework:12'