Aracılığıyla paylaş


Azure Pipelines kullanarak App Service'e özel kapsayıcı dağıtma

Azure DevOps, ücretsiz iş akışlarıyla kodunuzu barındırmanızı, derlemenizi, planlamanızı ve test etmenizi sağlar. Azure Pipelines'ı bu iş akışlarından biri olarak kullanmak, uygulamanızı herhangi bir platform ve bulutla çalışan CI/CD ile dağıtmanıza olanak tanır. İşlem hattı, deponuzun kök dizininde YAML dosyası olarak tanımlanır.

Bu makalede, Azure DevOps'taki bir Git deposundan App Service'e bir Windows kapsayıcı uygulaması dağıtmak için Azure Pipelines'ı kullanacağız. Azure DevOps'ta destekleyici dockerfile içeren bir .NET uygulamanız olduğunu varsayar.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
  • Bir Azure DevOps kuruluşu. Ücretsiz bir tane oluşturun.
  • Azure Repos'ta barındırılan Dockerfile ile çalışan bir Windows uygulaması.

Hizmet Bağlantısı Ekleme

İşlem hattınızı oluşturmadan önce, şablonunuzu oluştururken bağlantınızı seçmeniz ve doğrulamanız isteneceğinden önce Hizmet Bağlantınızı oluşturmanız gerekir. Hizmet Bağlantısı, görev şablonlarını kullanırken tercih ettiğiniz kayıt defterine (ACR veya Docker Hub) bağlanmanızı sağlar. Yeni bir hizmet bağlantısı eklerken Docker Kayıt Defteri seçeneğini belirleyin. Aşağıdaki form, ilgili bilgilerle birlikte Docker Hub veya Azure Container Registry'yi seçmenizi ister. Bu öğreticiyi takip etmek için Azure Container Registry'yi kullanın. Buradaki yönergeleri izleyerek yeni bir Hizmet Bağlantısı oluşturabilirsiniz.

Gizli dizilerinizin güvenliğini sağlama

Başkalarının erişmesini istemediğiniz hassas bilgileri kullandığımızdan, bilgilerimizi korumak için değişkenleri kullanırız. Buradaki yönergeleri izleyerek bir değişken oluşturun.

Değişken eklemek için işlem hattınızın düzenleme görünümünün sağ üst kısmındaki Kaydet düğmesinin yanındaki Değişkenler düğmesine tıklayın. Yeni Değişken düğmesini seçin ve bilgilerinizi girin. Her kaynaktan uygun olan kendi gizli dizilerinizle aşağıdaki değişkenleri ekleyin.

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

Yeni ardışık düzen oluşturma

Deponuz .NET uygulamanız ve destekleyici dockerfile ile oluşturulduktan sonra aşağıdaki adımları izleyerek işlem hattınızı oluşturabilirsiniz.

  1. Sol menü çubuğunda İşlem Hatları'na gidin ve İşlem hattı oluştur düğmesine tıklayın
  2. Sonraki ekranda , depo seçeneğiniz olarak Azure Repos Git'i seçin ve kodunuzun bulunduğu depoyu seçin
  3. Yapılandır sekmesinin altında Başlangıç İşlem Hattı seçeneğini belirleyin
  4. Sonraki Gözden Geçir sekmesinin altında Kaydet düğmesine tıklayın

Azure kapsayıcı kayıt defterine görüntü oluşturma ve gönderme

İşlem hattınız oluşturulduktan ve kaydedildikten sonra kapsayıcı oluşturma, kayıt defterine gönderme ve görüntüyü App Service'e dağıtma adımlarını çalıştırmak için işlem hattını düzenlemeniz gerekir. Başlamak için İşlem Hatları menüsüne gidin, oluşturduğunuz işlem hattınızı seçin ve Düzenle düğmesine tıklayın.

İlk olarak, görüntüyü oluşturabilmek için docker görevini eklemeniz gerekir. Aşağıdaki kodu ekleyin ve Dockerfile: app/Dockerfile değerini Dockerfile dosyanızın yoluyla değiştirin.

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)

App Service dağıtım görevini ekleme

Ardından, dağıtım görevini ayarlamanız gerekir. Bunun için abonelik adınız, uygulama adınız ve kapsayıcı kayıt defteriniz gerekir. Aşağıdaki kodu yapıştırarak yaml dosyasına yeni bir aşama ekleyin.

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

Ardından sağ üst köşedeki Yardımcıyı göster sekmesine gidin ve Azure Uygulaması Hizmeti dağıtma görevini bulun ve aşağıdaki formu doldurun:

  • Bağlantı türü: Azure Resource Manager
  • Azure aboneliği: aboneliğinizin-adı
  • App Service türü: Kapsayıcılar için Web App (Windows)
  • App Service adı: uygulamanızın-adı
  • Kayıt Defteri veya Ad Alanı: your-azure-container-registry-namespace
  • Görüntü: your-azure-container-registry-image-name

Bunları doldurduktan sonra, aşağıdaki görevi eklemek için Ekle düğmesine tıklayın:

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

Görevi ekledikten sonra işlem hattı çalışmaya hazırdır. Doğrula ve kaydet düğmesine tıklayın ve işlem hattını çalıştırın. İşlem hattı, Windows kapsayıcı görüntüsünü derleme ve Azure Container Registry'ye gönderme ve görüntüyü App Service'e dağıtma adımlarını izler.

Tam yaml dosyasının örneği aşağıda verilmiştir:

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'