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
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Organisasi Azure DevOps. Buat akun gratis.
- Aplikasi Windows yang berfungsi dengan Dockerfile yang dihosting di Azure Repos.
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.
- Navigasi ke Alur di bilah menu sebelah kiri dan klik tombol Buat alur
- Pada layar berikutnya, pilih Azure Repos Git sebagai opsi repositori Anda dan pilih repositori tempat kode Anda berada
- Di bawah tab Konfigurasi, pilih opsi Alur Pemula
- 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'