Azure Pipelines kullanarak App Service'i dağıtma
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Not
1 Haziran 2024'den itibaren, yeni oluşturulan tüm App Service uygulamaları adlandırma kuralını <app-name>-<random-hash>.<region>.azurewebsites.net
kullanarak benzersiz bir varsayılan ana bilgisayar adı oluşturma seçeneğine sahip olacaktır. Mevcut uygulama adları değişmeden kalır.
Örnek: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Diğer ayrıntılar için App Service Kaynağı için Benzersiz Varsayılan Ana Bilgisayar Adı'na bakın.
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
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Bir Azure DevOps kuruluşu. Ücretsiz bir tane oluşturun.
- Microsoft tarafından barındırılan aracılarda işlem hatlarını çalıştırma olanağı. Paralel bir iş satın alabilir veya ücretsiz katman isteyebilirsiniz.
- GitHub veya Azure Repos'ta barındırılan koda sahip çalışan bir Azure Uygulaması Hizmeti uygulaması.
- .NET: Azure'da ASP.NET Core web uygulaması oluşturma
- ASP.NET: Azure'da ASP.NET Framework web uygulaması oluşturma
- JavaScript: Azure Uygulaması Hizmetinde Node.js web uygulaması oluşturma
- Java: Azure Uygulaması Hizmetinde Java uygulaması oluşturma
- Python: Azure Uygulaması Hizmetinde Python uygulaması oluşturma
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.
Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.
İşlem Hatları'na gidin ve Yeni İşlem Hattı'na tıklayın.
İ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.
Depo listesi görüntülendiğinde deponuzu seçin.
Azure Pipelines uygulamasını yüklemek için GitHub'a yönlendirilebilirsiniz. Öyleyse Onayla ve yükle'yi seçin.
Yapılandır sekmesi görüntülendiğinde ASP.NET Çekirdek'i seçin.
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
YAML dosyasının sonuna tıklayın ve ardından Yardımcıyı göster'i seçin.
Azure Web App görevini eklemek için Görev yardımcısını kullanın.
Alternatif olarak, Azure Uygulaması Hizmeti dağıtma (AzureRmWebAppDeployment) görevini ekleyebilirsiniz.
Azure aboneliğinizi seçin. Bağlantınızı yetkilendirmeyi unutmayın. Yetkilendirme gerekli hizmet bağlantısını oluşturur.
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: - 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:
- 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
production
adıdır. True isedeployToSlotOrASE
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ı connectionString
bir 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:
- 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:
- Web paketleri ve XML parametre dosyalarının içindeki yapılandırma ayarlarını değiştirin.
- IIS dağıtım işlemine alışkınsanız Web Dağıtımı ile dağıtın.
- Sanal uygulamalara dağıtma.
- Kapsayıcı uygulamaları, İşlev uygulamaları, Web İşleri veya API ve Mobil uygulamalar gibi diğer uygulama türlerine dağıtın.
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)/**/*.zip
görünür. Web paketi başka bir yere yatırıldıysa değerini package
değ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