Mengonfigurasi Pengiriman Berkelanjutan dengan Azure Pipelines

Gunakan Azure Pipelines untuk menyebarkan secara otomatis ke Azure Functions. Azure Pipelines memungkinkan Anda membangun, menguji, dan menyebarkan dengan integrasi berkelanjutan (CI) dan pengiriman berkelanjutan (CD) menggunakan Azure DevOps.

Alur YAML ditentukan menggunakan file YAML di repositori Anda. Langkah adalah blok penyusun terkecil dari alur dan dapat menjadi skrip atau tugas (skrip yang dikemas sebelumnya). Pelajari tentang konsep utama dan komponen yang membentuk sebuah alur.

Anda akan menggunakan tugas AzureFunctionApp untuk menyebarkan ke Azure Functions. Sekarang ada dua versi tugas AzureFunctionApp (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2 menyertakan dukungan validasi yang ditingkatkan yang membuat alur cenderung gagal karena kesalahan.

Pilih versi tugas Anda di bagian atas artikel. Alur YAML tidak tersedia untuk Azure DevOps 2019 dan versi yang lebih lama.

Prasyarat

Membuat aplikasi Anda

  1. Masuk ke organisasi Azure DevOps Anda dan arahkan ke proyek Anda.
  2. Dalam proyek Anda, arahkan ke halaman Alur. Lalu pilih Rilis baru.
  3. Pilih salah satu opsi ini untuk Di mana kode Anda?:
    • GitHub: Anda mungkin diarahkan ke GitHub untuk masuk. Jika demikian, masukkan informasi masuk GitHub Anda. Ketika ini adalah koneksi pertama ke GitHub, wizard juga memancang Anda melalui proses menghubungkan DevOps ke akun GitHub Anda.
    • Azure Repos Git: Anda segera dapat memilih repositori di proyek DevOps Anda saat ini.
  4. Ketika daftar repositori muncul, pilih sampel repositori aplikasi Anda.
  5. Azure Pipelines menganalisis repositori Anda dan di Mengonfigurasi alur Anda menyediakan daftar templat potensial. Pilih templat aplikasi fungsi yang sesuai untuk bahasa Anda. Jika Anda tidak melihat templat yang benar pilih Perlihatkan lainnya.
  6. Pilih Simpan dan jalankan, lalu pilih Terapkan langsung ke cabang utama, lalu pilih Simpan dan jalankan lagi.
  7. Menjalankan baru sudah dimulai. Tunggu sampai eksekusi selesai.

Contoh alur build YAML

Alur khusus bahasa berikut dapat digunakan untuk membangun aplikasi.

Anda dapat menggunakan sampel berikut untuk membuat file YAML untuk membangun aplikasi .NET.

Jika Anda melihat kesalahan saat membuat aplikasi, verifikasi bahwa versi .NET yang Anda gunakan cocok dengan versi Azure Functions Anda. Untuk informasi selengkapnya, lihat Ringkasan versi runtime Azure Functions.

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'

Menerapkan aplikasi Anda

Anda akan menyebarkan dengan tugas Sebarkan Aplikasi Azure Function. Tugas ini memerlukan koneksi layanan Azure sebagai input. Koneksi layanan Azure menyimpan kredensial untuk menyambungkan dari Azure Pipelines ke Azure.

Untuk menyebarkan ke Azure Functions, tambahkan cuplikan berikut di akhir file azure-pipelines.yml Anda. Default appType adalah Windows. Anda dapat menentukan Linux dengan mengatur appType ke functionAppLinux.

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>'

Cuplikan mengasumsikan bahwa langkah-langkah build dalam file YAML Anda menghasilkan arsip zip di folder $(System.ArtifactsDirectory) pada agen Anda.

Menyebarkan kontainer

Anda dapat secara otomatis menyebarkan kode Anda untuk Azure Functions sebagai kontainer kustom setelah setiap build yang berhasil. Untuk mempelajari selengkapnya tentang kontainer, lihat Membuat fungsi di Linux menggunakan kontainer kustom.

Menyebarkan dengan tugas Azure Function App for Container

Cara paling sederhana untuk menyebarkan ke kontainer adalah dengan menggunakan tugas Azure Function App on Container Deploy.

Untuk menyebarkan, tambahkan cuplikan berikut di akhir file YAML Anda:

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)

Cuplikan tersebut mendorong gambar Docker ke Azure Container Registry Anda. Tugas Azure Function App on Container Deploy menarik citra Docker yang sesuai dengan BuildId dari repositori yang ditentukan, lalu menyebarkan citra tersebut.

Menyebarkan ke slot

Anda dapat mengonfigurasi aplikasi fungsi sehingga memiliki beberapa slot. Slot memungkinkan Anda menyebarkan aplikasi dengan aman dan mengujinya sebelum menyediakannya kepada pelanggan Anda.

Cuplikan YAML berikut menunjukkan cara menyebarkan ke slot pentahapan, lalu bertukar ke slot produksi:

- 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

Membuat alur dengan Azure CLI

Untuk membuat alur build di Azure, gunakan az functionapp devops-pipeline createperintah. Alur build dibuat untuk membuat dan merilis perubahan kode apa pun yang dibuat di repositori Anda. Perintah itu menghasilkan file YAML baru yang menentukan alur build dan rilis kemudian membawa ke repositori Anda. Prasyarat untuk perintah ini bergantung pada lokasi kode Anda.

  • Jika kode Anda ada di GitHub:

    • Anda harus memiliki izin menulis pada langganan Anda.

    • Anda harus menjadi administrator proyek di Azure DevOps.

    • Anda harus memiliki izin untuk membuat token akses pribadi GitHub (PAT) yang memiliki izin yang memadai. Untuk informasi selengkapnya, lihat Persyaratan izin GitHub PAT.

    • Anda harus memiliki izin untuk mengirim ke cabang utama di repositori GitHub sehingga Anda dapat melakukan pembuatan otomatis file YAML.

  • Jika kode Anda berada di Azure Repos:

    • Anda harus memiliki izin menulis pada langganan Anda.

    • Anda harus menjadi administrator proyek di Azure DevOps.

Membuat aplikasi Anda

  1. Masuk ke organisasi Azure DevOps Anda dan arahkan ke proyek Anda.
  2. Dalam proyek Anda, arahkan ke halaman Alur. Lalu, pilih tindakan untuk membuat alur baru.
  3. Menelusuri langkah-langkah wizard dengan terlebih dahulu memilih GitHub sebagai lokasi kode sumber Anda.
  4. Anda dapat diarahkan ke GitHub untuk masuk. Jika demikian, masukkan informasi masuk GitHub Anda.
  5. Ketika daftar repositori muncul, pilih sampel repositori aplikasi Anda.
  6. Azure Pipelines akan menganalisis repositori Anda dan merekomendasikan template. Pilih Simpan dan jalankan, lalu pilih Terapkan langsung ke cabang utama, lalu pilih Simpan dan jalankan lagi.
  7. Menjalankan baru sudah dimulai. Tunggu sampai eksekusi selesai.

Contoh alur build YAML

Alur khusus bahasa berikut dapat digunakan untuk membangun aplikasi.

Anda dapat menggunakan sampel berikut untuk membuat file YAML untuk membangun aplikasi .NET:

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'

Menerapkan aplikasi Anda

Anda akan menyebarkan dengan tugas Azure Function App Deploy v2 . Tugas ini memerlukan koneksi layanan Azure sebagai input. Koneksi layanan Azure menyimpan kredensial untuk menyambungkan dari Azure Pipelines ke Azure.

Versi v2 tugas mencakup dukungan untuk tumpukan aplikasi yang lebih baru untuk .NET, Python, dan Node. Tugas ini mencakup pemeriksaan pra-penyebaran jaringan. Ketika ada masalah pra-penyebaran, penyebaran berhenti.

Untuk menyebarkan ke Azure Functions, tambahkan cuplikan berikut di akhir file azure-pipelines.yml Anda. Default appType adalah Windows. Anda dapat menentukan Linux dengan mengatur appType ke functionAppLinux.

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>'

Cuplikan mengasumsikan bahwa langkah-langkah build dalam file YAML Anda menghasilkan arsip zip di folder $(System.ArtifactsDirectory) pada agen Anda.

Menyebarkan kontainer

Anda dapat secara otomatis menyebarkan kode Anda untuk Azure Functions sebagai kontainer kustom setelah setiap build yang berhasil. Untuk mempelajari selengkapnya tentang kontainer, lihat Bekerja dengan kontainer dan Azure Functions .

Menyebarkan dengan tugas Azure Function App for Container

Cara paling sederhana untuk menyebarkan ke kontainer adalah dengan menggunakan tugas Azure Function App on Container Deploy.

Untuk menyebarkan, tambahkan cuplikan berikut di akhir file YAML Anda:

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)

Cuplikan tersebut mendorong gambar Docker ke Azure Container Registry Anda. Tugas Azure Function App on Container Deploy menarik citra Docker yang sesuai dengan BuildId dari repositori yang ditentukan, lalu menyebarkan citra tersebut.

Menyebarkan ke slot

Anda dapat mengonfigurasi aplikasi fungsi sehingga memiliki beberapa slot. Slot memungkinkan Anda menyebarkan aplikasi dengan aman dan mengujinya sebelum menyediakannya kepada pelanggan Anda.

Cuplikan YAML berikut menunjukkan cara menyebarkan ke slot pentahapan, lalu bertukar ke slot produksi:

- 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

Membuat alur dengan Azure CLI

Untuk membuat alur build di Azure, gunakan az functionapp devops-pipeline createperintah. Alur build dibuat untuk membuat dan merilis perubahan kode apa pun yang dibuat di repositori Anda. Perintah itu menghasilkan file YAML baru yang menentukan alur build dan rilis kemudian membawa ke repositori Anda. Prasyarat untuk perintah ini bergantung pada lokasi kode Anda.

  • Jika kode Anda ada di GitHub:

    • Anda harus memiliki izin menulis pada langganan Anda.

    • Anda harus menjadi administrator proyek di Azure DevOps.

    • Anda harus memiliki izin untuk membuat token akses pribadi GitHub (PAT) yang memiliki izin yang memadai. Untuk informasi selengkapnya, lihat Persyaratan izin GitHub PAT.

    • Anda harus memiliki izin untuk mengirim ke cabang utama di repositori GitHub sehingga Anda dapat melakukan pembuatan otomatis file YAML.

  • Jika kode Anda berada di Azure Repos:

    • Anda harus memiliki izin menulis pada langganan Anda.

    • Anda harus menjadi administrator proyek di Azure DevOps.

Langkah berikutnya