Bagikan melalui


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 AzureFunctionApp tugas untuk menyebarkan ke Azure Functions. Sekarang ada dua versi tugas AzureFunctionApp (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2 termasuk 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.

Catatan

AzureFunctionApp@2 sangat disarankan. Menyebarkan ke aplikasi pada paket Konsumsi Flex hanya didukung di versi 2.

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 koneksi ini adalah koneksi GitHub pertama Anda, wizard juga memancang Anda melalui proses menyambungkan 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. Menyebarkan ke aplikasi Konsumsi Flex tidak didukung dengan @v1 tugas AzureFunctionApp.

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: <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 sebagai aplikasi fungsi dalam kontainer setelah setiap build yang berhasil. Untuk mempelajari selengkapnya tentang kontainer, lihat Bekerja dengan kontainer dan Azure Functions.

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.

Untuk contoh alur end-to-end lengkap, termasuk membangun kontainer dan penerbitan ke registri kontainer, lihat contoh penyebaran kontainer Azure Pipelines ini.

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. Anda harus membuat koneksi yang menggunakan federasi identitas beban kerja.

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. Menyebarkan ke aplikasi Konsumsi Flex mengharuskan Anda mengatur dan appType: functionAppLinuxisFlexConsumption: true. Alasan harus diatur ke functionAppLinux saat Anda menggunakan Flex Consumption karena Flex Consumption adalah Azure Function berbasis Linux.

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <SUBSCRIPTION_NAME>
  appName: <APP_NAME>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    appType: functionApp # this specifies a Windows-based function app
    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>'
    #slotName: '<SLOT_NAME>'

Langkah berikutnya