Поделиться через


Непрерывная поставка с помощью Azure Pipelines

Используйте Azure Pipelines для автоматического развертывания проекта кода в приложении-функции в Azure. Azure Pipelines позволяет создавать, тестировать и развертывать ресурсы с использованием технологий непрерывной интеграции (CI) и непрерывной поставки (CD) в Azure DevOps.

Конвейеры YAML определяются с помощью YAML-файла в репозитории. Шаг является наименьшим стандартным блоком конвейера и может быть скриптом или задачей (предварительно упакованым скриптом). Узнайте о ключевых понятиях и компонентах, составляющих конвейер.

Вы используете AzureFunctionApp задачу для развертывания вашего кода. Теперь в этой таблице сравниваются две версии AzureFunctionApp:

Сравнение и версия AzureFunctionApp@2 AzureFunctionApp@1
Поддерживает гибкий план потребления
Включает расширенную поддержку проверки*
Когда следует использовать... Рекомендуется для новых развертываний приложений Поддерживается для устаревших развертываний

* Улучшенная поддержка валидации снижает вероятность отказа конвейеров из-за ошибок.

Выберите версию задачи в верхней части статьи.

Примечание.

Обновитесь с AzureFunctionApp@1 до AzureFunctionApp@2, чтобы получить доступ к новым функциям и долгосрочной поддержке.

Необходимые компоненты

Не забудьте передать локальный проект кода в репозиторий GitHub или Azure Repos после публикации в приложение-функцию.

Сборка приложения

  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.
  2. В этом проекте перейдите к странице Pipelines (Конвейеры). Выберите действие создания конвейера сборки.
  3. Пройдите через шаги мастера, выбрав GitHub в качестве расположения исходного кода.
  4. Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.
  5. Когда появится список репозиториев, выберите репозиторий с примером приложения.
  6. Azure Pipelines проанализирует этот репозиторий и предложит рекомендуемый шаблон. Щелкните Save and run (Сохранить и запустить), затем выберите Commit directly to the main branch (Зафиксировать непосредственно в главной ветви) и снова щелкните Save and run (Сохранить и запустить).
  7. Будет выполнен новый запуск. Дождитесь завершения задания.

Примеры конвейеров сборки YAML

Для создания приложений можно использовать следующие конвейеры для соответствующего языка.

Чтобы создать YAML-файл для сборки приложения .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. Войдите в свою организацию Azure DevOps и откройте нужный проект.
  2. В этом проекте перейдите к странице Pipelines (Конвейеры). Затем нажмите New pipeline (Создать конвейер).
  3. Выберите один из следующих вариантов для вашего кода?
    • GitHub: вы можете быть перенаправлены на GitHub для входа. Для этого введите учетные данные GitHub. При первом подключении к GitHub мастер также описывает процесс подключения DevOps к учетным записям GitHub.
    • Azure Repos Git: вы сразу же сможете выбрать репозиторий в текущем проекте DevOps.
  4. Когда появится список репозиториев, выберите репозиторий с примером приложения.
  5. Azure Pipelines анализирует репозиторий и в разделе "Настройка конвейера " содержит список потенциальных шаблонов. Выберите соответствующий шаблон приложения-функции для вашего языка. Если вы не видите правильный шаблон, выберите "Показать больше".
  6. Щелкните Save and run (Сохранить и запустить), затем выберите Commit directly to the main branch (Зафиксировать непосредственно в главной ветви) и снова щелкните Save and run (Сохранить и запустить).
  7. Будет выполнен новый запуск. Дождитесь завершения задания.

Примеры конвейеров сборки YAML

Для создания приложений можно использовать следующие конвейеры для соответствующего языка.

В следующем примере можно создать ФАЙЛ YAML для создания приложения .NET.

Если при создании приложения возникают ошибки, убедитесь, что версия .NET, используемая вами, соответствует Функции Azure версии. Дополнительные сведения см. в обзоре версий среды выполнения Функций Azure.

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'

Развертывание приложения

Вы развернете задачу развертывания приложения-функции Azure версии 2 . Для этой задачи в качестве входных данных требуется подключение службы Azure. Подключение службы Azure сохраняет учетные данные для подключения из Azure Pipelines к Azure. Необходимо создать подключение, использующее федерацию удостоверений рабочей нагрузки.

Чтобы развернуть приложение на Azure Functions, добавьте этот фрагмент в конец azure-pipelines.yml файла, в зависимости от того, работает ли ваше приложение на Linux или 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 — Windows (functionApp). Можно указать систему Linux, указав для параметра appTypeзначение functionAppLinux. Приложение Flex Consumption работает в Linux, и необходимо задать оба appType: functionAppLinux и isFlexConsumption: true.

В этом фрагменте предполагается, что шаги сборки в файле YAML создают ZIP-архив в папке $(System.ArtifactsDirectory) агента.

Развертывание приложения-функции Azure выполняется с помощью задачи развертывания приложения-функции Azure . Для этой задачи в качестве входных данных требуется подключение службы Azure. Подключение службы Azure сохраняет учетные данные для подключения из Azure Pipelines к Azure.

Это важно

Развертывание в приложении Flex Consumption не поддерживается с помощью @v1AzureFunctionApp задачи.

Чтобы развернуть в Функциях Azure, добавьте этот фрагмент в конце 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

Этот фрагмент устанавливает appType в functionAppLinux, что требуется при развертывании на приложении, работающем на Linux. По умолчанию appType — Windows (functionApp).

В примере предполагается, что шаги сборки в файле YAML создают ZIP-архив в папке $(System.ArtifactsDirectory) агента.

Развертывание контейнера

Подсказка

Мы рекомендуем использовать поддержку Функций Azure в приложениях контейнеров Azure для размещения приложения-функции в пользовательском контейнере Linux. Дополнительные сведения см. в статье "Функции Azure" в Azure Container Apps.

При развертывании контейнерного приложения-функции используемая задача развертывания зависит от конкретной среды размещения.

Задачу развертывания приложений контейнеров Azure можно использовать для развертыванияAzureContainerApps образа приложения-функции в экземпляре приложения контейнеров Azure, оптимизированном для функций Azure.

Этот код развертывает базовый образ для приложения-функции модели изолированного процесса .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>

В идеале вы создадите собственный пользовательский контейнер в конвейере вместо использования базового образа, как показано в этом примере. Дополнительные сведения см. в разделе "Развертывание в Azure Container Apps из Azure Pipelines".

Развертывание в слот

Это важно

План потребления Flex в данный момент не поддерживает слоты. Приложения Linux также не поддерживают слоты при выполнении в плане Consumption, при этом поддержка этих приложений будет прекращена в будущем.

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

Вы можете настроить несколько слотов в приложении-функции. Слоты позволяют безопасно развернуть приложение и протестировать его, прежде чем сделать его доступным для клиентов.

В следующем фрагменте YAML показано, как выполнить развертывание в промежуточном слоте, а затем переключиться на рабочий слот:

- 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

При использовании слотов развертывания можно также добавить следующую задачу, чтобы выполнить переключение слотов в рамках развертывания.

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

Создание конвейера с использованием Azure CLI

Чтобы создать конвейер сборки в Azure, используйте az functionapp devops-pipeline create. Конвейер сборки создается для сборки и выпуска всех изменений кода, внесенных в репозиторий. Данная команда создает новый YAML-файл, который определяет конвейер сборки и выпуска, а затем фиксирует его в репозитории. Необходимые условия для выполнения этой команды зависят от расположения кода.

  • Если ваш код находится на портале GitHub:

    • у вас должны быть разрешения на запись для своей подписки;

    • вы должны быть администратором проекта в Azure DevOps.

    • у вас должны быть разрешения на создание личного маркера доступа (PAT) GitHub с достаточными разрешениями. Дополнительные сведения см. в разделе Создание репозиториев GitHub.

    • Чтобы зафиксировать автоматически созданный YAML-файл, необходимы разрешения на фиксацию в главной ветви в репозитории GitHub.

  • Если ваш код находится в Azure Repos:

    • у вас должны быть разрешения на запись для своей подписки;

    • вы должны быть администратором проекта в Azure DevOps.

Следующие шаги