Azure Pipelines ile sürekli teslim

Azure İşlevleri 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.

Azure İşlevleri dağıtmak için AzureFunctionApp görevini kullanacaksınız. AzureFunctionApp görevinin iki sürümü vardır (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2, hatalar nedeniyle işlem hatlarının başarısız olma olasılığını azaltan gelişmiş doğrulama desteği içerir.

Makalenin üst kısmında görev sürümünüzü seçin. YAML işlem hatları Azure DevOps 2019 ve önceki sürümlerde kullanılamaz.

Önkoşullar

Uygulamanızı derleme

  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 GitHub'a ilk bağlantı olduğunda sihirbaz, DevOps'u GitHub hesaplarınıza bağlama işleminde de 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:
- script: |
    dotnet restore
    dotnet build --configuration Release
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: '*.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 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.

Azure İşlevleri dağıtmak için dosyanızın azure-pipelines.yml sonuna aşağıdaki kod parçacığını ekleyin. Varsayılan değer appType Windows'dur. Linux'ı olarak ayarlayarak appTypefunctionAppLinuxbelirtebilirsiniz.

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: AzureFunctionApp@1 # Add this at the end of your file
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.zip
    #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 Name>'
    #slotName: '<Slot name>'

Kod parçacığı, 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

Her başarılı derlemeden sonra kodunuzu otomatik olarak özel bir kapsayıcı olarak Azure İşlevleri dağıtabilirsiniz. Kapsayıcılar hakkında daha fazla bilgi edinmek için bkz . Özel kapsayıcı kullanarak Linux'ta işlev oluşturma.

Kapsayıcı için Azure İşlev Uygulaması göreviyle dağıtma

Kapsayıcıya dağıtmanın en basit yolu, Kapsayıcı Dağıtımında Azure İşlev Uygulaması görevini kullanmaktır.

Dağıtmak için YAML dosyanızın sonuna aşağıdaki kod parçacığını ekleyin:

trigger:
- main

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: <Docker registry service connection>
  imageRepository: <Name of your image repository>
  containerRegistry: <Name of the Azure container registry>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: AzureFunctionAppContainer@1 # Add this at the end of your file
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the function app>'
    imageName: $(containerRegistry)/$(imageRepository):$(tag)

Kod parçacığı Docker görüntüsünü Azure Container Registry'nize gönderir. Kapsayıcı Dağıtımındaki Azure İşlev Uygulaması görevi, belirtilen depodan öğesine karşılık gelen BuildId uygun Docker görüntüsünü çeker ve görüntüyü dağıtır.

Yuvaya dağıtma

İş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

Azure CLI ile işlem hattı oluşturma

Azure'da derleme işlem hattı oluşturmak için komutunu kullanınaz 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.

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:
- script: |
    dotnet restore
    dotnet build --configuration Release
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: '*.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.

Görevin v2 sürümü .NET, Python ve Node için daha yeni uygulama yığınları desteği içerir. Görev, ağ dağıtım öncesi denetimlerini içerir. Dağıtım öncesi sorunlar olduğunda dağıtım durdurulur.

Azure İşlevleri dağıtmak için dosyanızın azure-pipelines.yml sonuna aşağıdaki kod parçacığını ekleyin. Varsayılan değer appType Windows'dur. Linux'ı olarak ayarlayarak appTypefunctionAppLinuxbelirtebilirsiniz.

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: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.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 Name>'
    #slotName: '<Slot name>'

Kod parçacığı, 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

Her başarılı derlemeden sonra kodunuzu otomatik olarak özel bir kapsayıcı olarak Azure İşlevleri dağıtabilirsiniz. Kapsayıcılar hakkında daha fazla bilgi edinmek için bkz. Kapsayıcılarla çalışma ve Azure İşlevleri.

Kapsayıcı için Azure İşlev Uygulaması göreviyle dağıtma

Kapsayıcıya dağıtmanın en basit yolu, Kapsayıcı Dağıtımında Azure İşlev Uygulaması görevini kullanmaktır.

Dağıtmak için YAML dosyanızın sonuna aşağıdaki kod parçacığını ekleyin:

trigger:
- main

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: <Docker registry service connection>
  imageRepository: <Name of your image repository>
  containerRegistry: <Name of the Azure container registry>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: AzureFunctionAppContainer@1 # Add this at the end of your file
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the function app>'
    imageName: $(containerRegistry)/$(imageRepository):$(tag)

Kod parçacığı Docker görüntüsünü Azure Container Registry'nize gönderir. Kapsayıcı Dağıtımındaki Azure İşlev Uygulaması görevi, belirtilen depodan öğesine karşılık gelen BuildId uygun Docker görüntüsünü çeker ve görüntüyü dağıtır.

Yuvaya dağıtma

İş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@2
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux
    appName: <Name of the Function app>
    package: $(System.ArtifactsDirectory)/**/*.zip
    deploymentMethod: 'auto'
    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

Azure CLI ile işlem hattı oluşturma

Azure'da derleme işlem hattı oluşturmak için komutunu kullanınaz 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.