Bagikan melalui


Mengonfigurasi Pengiriman Berkelanjutan dengan Azure Pipelines

Gunakan Azure Pipelines untuk menyebarkan proyek kode Anda secara otomatis ke aplikasi fungsi di Azure. 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 menggunakan tugas AzureFunctionApp untuk menyebarkan kode Anda. Sekarang ada dua versi AzureFunctionApp, yang dibandingkan dalam tabel ini:

Perbandingan/versi AzureFunctionApp@2 AzureFunctionApp@1
Mendukung rencana Konsumsi Flex
Menyertakan dukungan validasi yang disempurnakan*
Kapan harus menggunakan... Direkomendasikan untuk penyebaran aplikasi baru Dipertahankan untuk penyebaran sistem lama

* Dukungan validasi yang ditingkatkan membuat pipeline kemungkinan gagal berkurang karena kesalahan.

Pilih versi tugas Anda di bagian atas artikel.

Catatan

Tingkatkan dari AzureFunctionApp@1 ke AzureFunctionApp@2 untuk akses ke fitur baru dan dukungan jangka panjang.

Prasyarat

Ingatlah untuk mengunggah proyek kode lokal ke repositori GitHub atau Azure Repos setelah Anda menerbitkannya ke aplikasi fungsi Anda.

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

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.

Untuk menyebarkan ke Azure Functions, tambahkan cuplikan ini di akhir file Anda azure-pipelines.yml , tergantung pada apakah aplikasi Anda berjalan di Linux atau Windows:

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

appType Defaultnya adalah Windows (functionApp). Anda dapat menentukan Linux dengan mengatur appType ke functionAppLinux. Aplikasi Konsumsi Flex berjalan di Linux, dan Anda harus mengatur appType: functionAppLinux serta isFlexConsumption: true.

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

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

Penting

Menyebarkan ke aplikasi Konsumsi Flex tidak didukung dengan menggunakan @v1 dari tugas AzureFunctionApp.

Untuk menyebarkan ke Azure Functions, tambahkan cuplikan ini di akhir file Anda azure-pipelines.yml :

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

Cuplikan ini mengatur appType ke functionAppLinux, yang diperlukan saat menyebarkan ke aplikasi yang berjalan di Linux. appType Defaultnya adalah Windows (functionApp).

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

Menyebarkan kontainer

Petunjuk / Saran

Sebaiknya gunakan dukungan Azure Functions di Azure Container Apps untuk menghosting aplikasi fungsi Anda dalam kontainer Linux kustom. Untuk informasi selengkapnya, lihat Gambaran umum Azure Functions di Azure Container Apps.

Saat menyebarkan aplikasi fungsi dalam kontainer, tugas penyebaran yang Anda gunakan bergantung pada lingkungan hosting tertentu.

Anda dapat menggunakan tugas Penyebaran Azure Container Apps (AzureContainerApps) untuk menyebarkan gambar aplikasi fungsi ke instans Aplikasi Kontainer Azure yang dioptimalkan untuk Azure Functions.

Kode ini menyebarkan gambar dasar untuk aplikasi fungsi model proses terisolasi .NET 8:

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>

Idealnya, Anda akan membangun kontainer kustom Anda sendiri di alur alih-alih menggunakan gambar dasar, seperti yang ditunjukkan dalam contoh ini. Untuk informasi selengkapnya, lihat Menyebarkan ke Azure Container Apps dari Azure Pipelines.

Menyebarkan ke slot

Penting

Paket Konsumsi Flex saat ini tidak mendukung slot. Aplikasi Linux juga tidak mendukung slot saat berjalan dalam paket Konsumsi, dan dukungan untuk aplikasi ini dihentikan di masa mendatang.

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

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

Saat menggunakan slot penyebaran, Anda juga dapat menambahkan tugas berikut untuk melakukan pertukaran slot sebagai bagian dari proses penyebaran Anda.

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    WebAppName: <APP_NAME>
    ResourceGroupName: <RESOURCE_GROUP>
    SourceSlot: <SLOT_NAME>
    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