Aracılığıyla paylaş


Azure Pipelines ile sürekli teslim

Kod projenizi Azure'daki bir işlev uygulamasına 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.

Kodunuzu dağıtmak için AzureFunctionApp görevini kullanırsınız. Şimdi, bu tabloda karşılaştırılan iki sürümü AzureFunctionAppvardır:

Karşılaştırma/sürüm AzureFunctionApp@2 AzureFunctionApp@1
Flex Tüketim planını destekler
Gelişmiş doğrulama desteği içerir*
Ne zaman kullanılır?... Yeni uygulama dağıtımları için önerilir Eski dağıtımlar için bakım

* Gelişmiş doğrulama desteği, hatalar nedeniyle işlem hatlarının başarısız olma olasılığını azaltır.

Makalenin üst kısmında görev sürümünüzü seçin.

Not

Yeni özelliklere ve uzun süreli desteğe erişmek için AzureFunctionApp@1'dan AzureFunctionApp@2'e yükseltin.

Önkoşullar

Yerel kod projesini işlev uygulamanızda yayımladıktan sonra GitHub veya Azure Repos deponuza yüklemeyi unutmayın.

Uygulamanızı derleme

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.
  2. Projenizde İşlem Hatları sayfasına gidin. Ardından eylemi seçerek yeni bir işlem hattı oluşturun.
  3. İlk olarak kaynak kodunuzun konumu olarak GitHub'ı seçerek sihirbazın adımlarını izleyin.
  4. Oturum açmak için GitHub'a yönlendirilebilirsiniz. Öyleyse GitHub kimlik bilgilerinizi girin.
  5. Depo listesi görüntülendiğinde örnek uygulama deponuzu seçin.
  6. Azure Pipelines deponuzu analiz eder ve bir şablon önerir. Kaydet ve çalıştır'ı seçin, ardından Doğrudan ana dala işle'yi ve ardından Kaydet ve yeniden çalıştır'ı seçin.
  7. Yeni bir çalıştırma başlatılır. Çalıştırmanın bitmesini bekleyin.

Örnek YAML derleme işlem hatları

Aşağıdaki dile özgü işlem hatları uygulama oluşturmak için kullanılabilir.

Bir .NET uygulaması oluşturmak üzere YAML dosyası oluşturmak için aşağıdaki örneği kullanabilirsiniz:

pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    displayName: 'Install .NET 8.0 SDK'
    inputs:
      packageType: 'sdk'
      version: '8.0.x'
      installationPath: $(Agent.ToolsDirectory)/dotnet
  - script: |
      dotnet restore
      dotnet build --configuration Release
  - task: DotNetCoreCLI@2
    displayName: 'dotnet publish'
    inputs:
      command: publish
      arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
      projects: 'csharp/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: false
  - task: ArchiveFiles@2
    displayName: "Archive files"
    inputs:
      rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
      includeRootFolder: false
      archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
      artifactName: 'drop'
  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.
  2. Projenizde İşlem Hatları sayfasına gidin. Ardından Yeni işlem hattı'ni seçin.
  3. Kodunuz nerede? için şu seçeneklerden birini belirleyin:
    • GitHub: Oturum açmak için GitHub'a yönlendirilebilirsiniz. Öyleyse GitHub kimlik bilgilerinizi girin. Bu bağlantı ilk GitHub bağlantınız olduğunda sihirbaz, DevOps'u GitHub hesaplarınıza bağlama işleminde size yol gösterir.
    • Azure Repos Git: Geçerli DevOps projenizde hemen bir depo seçebilirsiniz.
  4. Depo listesi görüntülendiğinde örnek uygulama deponuzu seçin.
  5. Azure Pipelines deponuzu analiz eder ve İşlem hattınızı yapılandırma bölümünde olası şablonların bir listesini sağlar. Diliniz için uygun işlev uygulaması şablonunu seçin. Doğru şablonu görmüyorsanız Daha fazla göster'i seçin.
  6. Kaydet ve çalıştır'ı seçin, ardından Doğrudan ana dala işle'yi ve ardından Kaydet ve yeniden çalıştır'ı seçin.
  7. Yeni bir çalıştırma başlatılır. Çalıştırmanın bitmesini bekleyin.

Örnek YAML derleme işlem hatları

Aşağıdaki dile özgü işlem hatları uygulama oluşturmak için kullanılabilir.

Bir .NET uygulaması oluşturmak üzere YAML dosyası oluşturmak için aşağıdaki örneği kullanabilirsiniz.

Uygulamanızı oluştururken hatalar görürseniz kullandığınız .NET sürümünün Azure İşlevleri sürümünüzle eşleştiğini doğrulayın. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.

pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    displayName: 'Install .NET 8.0 SDK'
    inputs:
      packageType: 'sdk'
      version: '8.0.x'
      installationPath: $(Agent.ToolsDirectory)/dotnet
  - script: |
      dotnet restore
      dotnet build --configuration Release
  - task: DotNetCoreCLI@2
    displayName: 'dotnet publish'
    inputs:
      command: publish
      arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
      projects: 'csharp/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: false
  - task: ArchiveFiles@2
    displayName: "Archive files"
    inputs:
      rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
      includeRootFolder: false
      archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
      artifactName: 'drop'

Uygulamanızı dağıtma

Azure İşlev Uygulaması Dağıtma v2 göreviyle dağıtım yapacaksınız. Bu görev, giriş olarak bir Azure hizmet bağlantısı gerektirir. Azure hizmet bağlantısı, Azure Pipelines'tan Azure'a bağlanmak için kimlik bilgilerini depolar. İş yükü kimlik federasyonu kullanan bir bağlantı oluşturmanız gerekir.

Azure İşlevleri'ne dağıtmak için, uygulamanızın Linux veya Windows üzerinde çalışıp çalışmadığına bağlı olarak bu kod parçacığını dosyanızın azure-pipelines.yml sonuna ekleyin:

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Name of your Azure subscription>
    appType: functionApp # this specifies a Windows-based function app
    appName: $(appName)
    package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
    deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
    #Uncomment the next lines to deploy to a deployment slot
    #Note that deployment slots is not supported for Linux Dynamic SKU
    #deployToSlotOrASE: true
    #resourceGroupName: '<RESOURCE_GROUP>'
    #slotName: '<SLOT_NAME>'

Varsayılan appType Windows (functionApp). Linux'ı olarak ayarlayarak appTypefunctionAppLinuxbelirtebilirsiniz. Flex Consumption uygulaması Linux üzerinde çalışır ve hem appType: functionAppLinux hem de isFlexConsumption: true değerini ayarlamanız gerekir.

Kod parçacığı, YAML dosyanızdaki derleme adımlarının aracınızdaki klasörde zip arşivini $(System.ArtifactsDirectory) ürettiğini varsayar.

Azure İşlev Uygulaması Dağıtma görevini kullanarak dağıtabilirsiniz. Bu görev, giriş olarak bir Azure hizmet bağlantısı gerektirir. Azure hizmet bağlantısı, Azure Pipelines'tan Azure'a bağlanmak için kimlik bilgilerini depolar.

Önemli

Flex Consumption uygulamasına dağıtım, @v1AzureFunctionApp görevi kullanılarak desteklenmez.

Azure İşlevleri'ne dağıtmak için dosyanızın azure-pipelines.yml sonuna şu kod parçacığını ekleyin:

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: DownloadBuildArtifacts@1 # Add this at the end of your file
  inputs:
    buildType: 'current'
    downloadType: 'single'
    artifactName: 'drop'
    itemPattern: '**/*.zip'
    downloadPath: '$(System.ArtifactsDirectory)'
- task: AzureFunctionApp@1
  inputs:
    azureSubscription: $(azureSubscription)
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.zip

Linux üzerinde çalışan bir uygulamaya dağıtım yaparken gerekli olan appType'i functionAppLinux olarak ayarlayan bu kısa kod. Varsayılan appType Windows (functionApp).

Örnek, YAML dosyanızdaki derleme adımlarının aracınızdaki klasörde zip arşivini $(System.ArtifactsDirectory) ürettiğini varsayar.

Kapsayıcı dağıtma

Tavsiye

İşlev uygulamanızı özel bir Linux kapsayıcısında barındırmak için Azure Container Apps'te Azure İşlevleri desteğini kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure Container Apps üzerinde Azure İşlevleri'ne genel bakış.

Kapsayıcılı işlev uygulaması dağıtırken, kullandığınız dağıtım görevi belirli barındırma ortamına bağlıdır.

İşlev uygulaması görüntüsünü Azure İşlevleri için iyileştirilmiş bir Azure Container App örneğine dağıtmak için Azure Container Apps Dağıtma görevini (AzureContainerApps) kullanabilirsiniz.

Bu kod, .NET 8 yalıtılmış işlem modeli işlev uygulaması için temel görüntüyü dağıtır:

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureContainerApps@1
  inputs:
    azureSubscription: <Name of your Azure subscription>
    imageToDeploy: 'mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0'
    containerAppName: <Name of your container app>
    resourceGroup: <Name of the resource group>

İdeal olan, bu örnekte gösterildiği gibi temel görüntü kullanmak yerine işlem hattında kendi özel kapsayıcınızı oluşturmanızdır. Daha fazla bilgi için bkz. Azure Pipelines'tan Azure Container Apps'e dağıtma.

Yuvaya dağıtma

Önemli

Flex Consumption planı şu anda yuvaları desteklememektedir. Linux uygulamaları tüketim planında çalışırken yuvaları da desteklemez ve gelecekte bu uygulamalara yönelik destek kullanımdan kaldırılacaktır.

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Name of your Azure subscription>
    appType: functionApp # this specifies a Windows-based function app
    appName: $(appName)
    package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
    deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
    deployToSlotOrASE: true
    resourceGroupName: '<RESOURCE_GROUP>'
    slotName: '<SLOT_NAME>'

İşlev uygulamanızı birden çok yuvaya sahip olacak şekilde yapılandırabilirsiniz. Yuvalar, uygulamanızı güvenli bir şekilde dağıtmanıza ve müşterilerinizin kullanımına sunmadan önce test etmeye olanak sağlar.

Aşağıdaki YAML kod parçacığı, hazırlama yuvasına dağıtmayı ve ardından üretim yuvasına geçmeyi gösterir:

- task: AzureFunctionApp@1
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux
    appName: <Name of the function app>
    package: $(System.ArtifactsDirectory)/**/*.zip
    deployToSlotOrASE: true
    resourceGroupName: <Name of the resource group>
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <Azure service connection>
    WebAppName: <name of the function app>
    ResourceGroupName: <name of resource group>
    SourceSlot: staging
    SwapWithProduction: true

Dağıtım yuvalarını kullanırken, dağıtımınızın bir parçası olarak yuva değişimi gerçekleştirmek için aşağıdaki görevi de ekleyebilirsiniz.

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    WebAppName: <APP_NAME>
    ResourceGroupName: <RESOURCE_GROUP>
    SourceSlot: <SLOT_NAME>
    SwapWithProduction: true

Azure CLI ile işlem hattı oluşturma

Azure'da derleme işlem hattı oluşturmak için komutunu kullanın az functionapp devops-pipeline create. Derleme işlem hattı, deponuzda yapılan kod değişikliklerini derlemek ve yayınlamak için oluşturulur. komutu derleme ve yayın işlem hattını tanımlayan yeni bir YAML dosyası oluşturur ve ardından deponuza işler. Bu komutun önkoşulları kodunuzun konumuna bağlıdır.

  • Kodunuz GitHub'daysa:

    • Aboneliğiniz için yazma izinlerine sahip olmanız gerekir.

    • Azure DevOps'ta proje yöneticisi olmanız gerekir.

    • Yeterli izinlere sahip bir GitHub kişisel erişim belirteci (PAT) oluşturmak için izinleriniz olmalıdır. Daha fazla bilgi için bkz . GitHub PAT izin gereksinimleri.

    • Otomatik oluşturulan YAML dosyasını işleyebilmek için GitHub deponuzdaki ana dala işleme izinleriniz olmalıdır.

  • Kodunuz Azure Repos'taysa:

    • Aboneliğiniz için yazma izinlerine sahip olmanız gerekir.

    • Azure DevOps'ta proje yöneticisi olmanız gerekir.

Sonraki adımlar

  • Azure İşlevleri genel bakışını gözden geçirin.
  • Azure DevOps'a genel bakış'ı gözden geçirin.