Azure Pipelines kullanarak App Service'i dağıtma

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Web uygulamanızı her başarılı derlemede Azure Uygulaması Hizmeti'ne otomatik olarak dağıtmak için Azure Pipelines'ı kullanın. Azure Pipelines, Azure DevOps kullanarak sürekli tümleştirme (CI) ve sürekli teslim (CD) ile derlemenizi, test etmenizi ve dağıtmanızı sağlar.

YAML işlem hatları, deponuzda bir YAML dosyası kullanılarak tanımlanır. Adım, işlem hattının en küçük yapı taşıdır ve betik veya görev (önceden paketlenmiş betik) olabilir. İşlem hattını oluşturan temel kavramlar ve bileşenler hakkında bilgi edinin.

İşlem hattınızdaki Azure Uygulaması Hizmeti'ne dağıtmak için Azure Web App görevini (AzureWebApp) kullanacaksınız. Dağıtımınızda XML parametrelerini kullanmanız gerektiği gibi daha karmaşık senaryolar için Azure Uygulaması Hizmeti dağıtım görevini (AzureRmWebAppDeployment) kullanabilirsiniz.

Önkoşullar

1. Yığınınız için işlem hattı oluşturma

Bu bölümdeki kod örneklerinde bir ASP.NET web uygulaması dağıttığınız varsayılır. Diğer çerçeveler için yönergeleri uyarlayabilirsiniz.

Azure Pipelines ekosistem desteği hakkında daha fazla bilgi edinin.

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  2. İşlem Hatları'na gidin ve Yeni İşlem Hattı'na tıklayın.

  3. İstendiğinde kaynak kodunuzun konumunu seçin: Azure Repos Git veya GitHub.

    Oturum açmak için GitHub'a yönlendirilebilirsiniz. Öyleyse GitHub kimlik bilgilerinizi girin.

  4. Depo listesi görüntülendiğinde deponuzu seçin.

  5. Azure Pipelines uygulamasını yüklemek için GitHub'a yönlendirilebilirsiniz. Öyleyse Onayla ve yükle'yi seçin.

  6. Yapılandır sekmesi görüntülendiğinde ASP.NET Çekirdek'i seçin.

  7. Yeni işlem hattınız görüntülendiğinde, ne yaptığını görmek için YAML'ye göz atın. Hazır olduğunuzda Kaydet ve çalıştır'ı seçin.

2. Dağıtım görevini ekleme

  1. YAML dosyasının sonuna tıklayın ve ardından Yardımcıyı göster'i seçin.

  2. Azure Web App görevini eklemek için Görev yardımcısını kullanın.

    Screenshot of Azure web app task.

    Alternatif olarak, Azure Uygulaması Hizmeti dağıtma (AzureRmWebAppDeployment) görevini ekleyebilirsiniz.

  3. Azure aboneliğinizi seçin. Bağlantınızı yetkilendirmeyi unutmayın. Yetkilendirme gerekli hizmet bağlantısını oluşturur.

  4. App Service uygulamanızı temel alan Uygulama türü, Uygulama adı ve Çalışma Zamanı yığınını seçin. Tüm YAML'niz aşağıdaki koda benzer görünmelidir.

    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: dotnet build --configuration $(buildConfiguration)
      displayName: 'dotnet build $(buildConfiguration)'
    - 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: Azure aboneliğinize yönelik yetkili hizmet bağlantısının adı.
    • appName: Mevcut uygulamanızın adı.
    • package: App Service içeriğinizi içeren bir klasörün veya paketin dosya yolu. Joker karakterler desteklenir.

Örnek: .NET uygulaması dağıtma

.zip bir web paketini (örneğin, bir ASP.NET web uygulamasından) Azure Web App'e dağıtmak için aşağıdaki kod parçacığını kullanarak derlemeyi bir uygulamaya dağıtın.

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
- 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: Azure aboneliğiniz.
  • appType: Web App türünüz.
  • appName: Mevcut uygulama hizmetinizin adı.
  • package: paketin dosya yolu veya app service içeriğinizi içeren bir klasör. Joker karakterler desteklenir.

Örnek: sanal uygulamaya dağıtma

Varsayılan olarak, dağıtımınız Azure Web App'teki kök uygulamaya gerçekleşir. Azure Uygulaması Hizmeti dağıtma (AzureRmWebAppDeployment) görevinin VirtualApplication özelliğini kullanarak belirli bir sanal uygulamaya dağıtabilirsiniz:

- task: AzureRmWebAppDeployment@4
  inputs:
    VirtualApplication: '<name of virtual application>'
  • VirtualApplication: Azure portalında yapılandırılan Sanal Uygulamanın adı. Daha fazla bilgi için bkz . Azure portalında App Service uygulaması yapılandırma.

Örnek: Yuvaya dağıtma

Aşağıdaki örnekte hazırlama yuvasına dağıtma ve ardından üretim yuvasıyla değiştirme işlemi gösterilmektedir:

- 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: Azure aboneliğiniz.
  • appType: (isteğe bağlı) Linux'ta bir Web Uygulamasına dağıtmak için kullanın webAppLinux .
  • appName: Mevcut uygulama hizmetinizin adı.
  • deployToSlotOrASE: Boole. Mevcut bir dağıtım yuvasına veya Azure Uygulaması Hizmet Ortamı'na dağıtın.
  • resourceGroupName: Kaynak grubunun adı. True ise deployToSlotOrASE gereklidir.
  • slotName: Yuvanın varsayılan productionadıdır. True ise deployToSlotOrASE gereklidir.
  • package: paketin dosya yolu veya app service içeriğinizi içeren bir klasör. Joker karakterler desteklenir.
  • SourceSlot: Doğru olduğunda SwapWithProduction üretime gönderilen yuva.
  • SwapWithProduction: Boole. Kaynak yuva trafiğini üretimle değiştirin.

Örnek: Birden çok web uygulamasına dağıtma

Dağıtım işlem hattı ayarlamak için YAML dosyanızdaki işleri kullanabilirsiniz. İşleri kullanarak birden çok web uygulamasına dağıtım sırasını denetleyebilirsiniz.

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'

Örnek: Değişken değiştirmeleri yapma

Çoğu dil yığını için uygulama ayarları ve bağlantı dizesi çalışma zamanında ortam değişkenleri olarak ayarlanabilir.

Ancak, Web.config'inize değişken değiştirmeler yapmak istemenizin başka nedenleri de vardır. Bu örnekte, Web.config dosyanız adlı connectionStringbir bağlantı dizesi içerir. Her web uygulamasına dağıtmadan önce değerini değiştirebilirsiniz. Bunu web.config dönüşümü uygulayarak veya Web.config dosyanızda değişkenleri değiştirerek yapabilirsiniz.

Aşağıdaki kod parçacığında, Azure Uygulaması Hizmet Dağıtımı (AzureRmWebAppDeployment) görevi kullanılarak değişken değiştirme örneği gösterilmektedir:

jobs:
- job: test
  variables:
    connectionString: <test-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Test stage Azure service connection>'
      WebAppName: '<name of test stage web app>'
      enableXmlVariableSubstitution: true

- job: prod
  dependsOn: test
  variables:
    connectionString: <prod-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Prod stage Azure service connection>'
      WebAppName: '<name of prod stage web app>'
      enableXmlVariableSubstitution: true

Örnek: Koşullu olarak dağıtma

Bunu YAML'de yapmak için aşağıdaki tekniklerden birini kullanabilirsiniz:

  • Dağıtım adımlarını ayrı bir işte yalıtın ve bu işe bir koşul ekleyin.
  • Adıma bir koşul ekleyin.

Aşağıdaki örnekte, yalnızca ana daldan kaynaklanan derlemeleri dağıtmak için adım koşullarının nasıl kullanılacağı gösterilmektedir:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

Koşullar hakkında daha fazla bilgi edinmek için bkz . Koşulları belirtme.

Örnek: Web Dağıtımı kullanarak dağıtma

Azure Uygulaması Hizmeti dağıtma (AzureRmWebAppDeployment) görevi Web Dağıtımı'nı kullanarak App Service'e dağıtabilir.

trigger:
- main

pool:
  vmImage: windows-latest

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
- 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'

Sık sorulan sorular

ve AzureRmWebAppDeployment görevleri arasındaki AzureWebApp fark nedir?

Azure Web App görevi (AzureWebApp), Azure Web App'e dağıtmanın en basit yoludur. Varsayılan olarak, dağıtımınız Azure Web App'teki kök uygulamaya gerçekleşir.

Azure Uygulaması Hizmet Dağıtımı görevi (AzureRmWebAppDeployment), aşağıdakiler gibi daha fazla özel senaryoyu işleyebilir:

Not

Dosya dönüşümleri ve değişken değiştirme, Azure Pipelines'da kullanılmak üzere ayrı Dosya Dönüştürme görevi tarafından da desteklenir. Herhangi bir yapılandırma ve parametre dosyasına dosya dönüştürmeleri ve değişken değiştirmeleri uygulamak için Dosya Dönüştürme görevini kullanabilirsiniz.

"Geçersiz App Service paketi veya klasör yolu sağlandı" iletisini alıyorum.

YAML işlem hatlarında, işlem hattınıza bağlı olarak, derlenmiş web paketinizin kaydedildiği yer ile dağıtım görevinin aradığı yer arasında bir uyuşmazlık olabilir. Örneğin, AzureWebApp görev dağıtım için web paketini alır. Örneğin, AzureWebApp görevi içinde $(System.DefaultWorkingDirectory)/**/*.zipgörünür. Web paketi başka bir yere yatırıldıysa değerini packagedeğiştirin.

"Webdeploy seçeneklerini kullanarak yayımlama yalnızca Windows aracısı kullanılırken desteklenir" iletisini alıyorum.

Bu hata AzureRmWebAppDeployment görevinde, görevi Web Dağıtımı kullanarak dağıtılacak şekilde yapılandırdığınızda oluşur, ancak aracınız Windows çalıştırmıyor. YAML'nizde aşağıdaki koda benzer bir şey olduğunu doğrulayın:

pool:
  vmImage: windows-latest

Temel kimlik doğrulamasını devre dışı bırakdığımda Web Dağıtımı çalışmıyor

Microsoft Entra Id kimlik doğrulamasının AzureRmWebAppDeployment görevle çalışmasını sağlamayla ilgili sorun giderme bilgileri için bkz. Windows aracımdan Microsoft Entra Id kimlik doğrulamasını kullanarak Azure Uygulaması Hizmetime Web Dağıtamıyorum

Sonraki adımlar

  • Azure DevOps işlem hattınızı özelleştirin.