Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте Azure Pipelines для автоматического развертывания проекта кода в приложении-функции в Azure. Azure Pipelines позволяет создавать, тестировать и развертывать ресурсы с использованием технологий непрерывной интеграции (CI) и непрерывной поставки (CD) в Azure DevOps.
Конвейеры YAML определяются с помощью YAML-файла в репозитории. Шаг является наименьшим стандартным блоком конвейера и может быть скриптом или задачей (предварительно упакованым скриптом). Узнайте о ключевых понятиях и компонентах, составляющих конвейер.
Вы используете AzureFunctionApp задачу для развертывания вашего кода. Теперь в этой таблице сравниваются две версии AzureFunctionApp:
| Сравнение и версия | AzureFunctionApp@2 | AzureFunctionApp@1 |
|---|---|---|
| Поддерживает гибкий план потребления | ✔ | ❌ |
| Включает расширенную поддержку проверки* | ✔ | ❌ |
| Когда следует использовать... | Рекомендуется для новых развертываний приложений | Поддерживается для устаревших развертываний |
* Улучшенная поддержка валидации снижает вероятность отказа конвейеров из-за ошибок.
Выберите версию задачи в верхней части статьи.
Примечание.
Обновитесь с AzureFunctionApp@1 до AzureFunctionApp@2, чтобы получить доступ к новым функциям и долгосрочной поддержке.
Необходимые компоненты
Организация Azure DevOps. Если у вас нет учетной записи, вы можете создать ее бесплатно. Если у вашей команды уже есть организация Azure DevOps, убедитесь, что вы являетесь администратором проекта Azure DevOps, который вы хотите использовать.
Возможность запуска конвейеров на размещенных агентах Майкрософт. Вы можете приобрести параллельное задание или запросить уровень "Бесплатный".
Если вы планируете использовать GitHub вместо Azure Repos, вам также нужен репозиторий GitHub. Если у вас нет учетной записи GitHub, ее можно создать бесплатно.
Существующее приложение-функция в Azure с исходным кодом в поддерживаемом репозитории. Если у вас еще нет проекта кода Функции Azure, можно создать его, выполнив следующую статью по языку:
Не забудьте передать локальный проект кода в репозиторий GitHub или Azure Repos после публикации в приложение-функцию.
Сборка приложения
- Войдите в свою организацию Azure DevOps и откройте нужный проект.
- В этом проекте перейдите к странице Pipelines (Конвейеры). Выберите действие создания конвейера сборки.
- Пройдите через шаги мастера, выбрав GitHub в качестве расположения исходного кода.
- Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.
- Когда появится список репозиториев, выберите репозиторий с примером приложения.
- Azure Pipelines проанализирует этот репозиторий и предложит рекомендуемый шаблон. Щелкните Save and run (Сохранить и запустить), затем выберите Commit directly to the main branch (Зафиксировать непосредственно в главной ветви) и снова щелкните Save and run (Сохранить и запустить).
- Будет выполнен новый запуск. Дождитесь завершения задания.
Примеры конвейеров сборки 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'
- Войдите в свою организацию Azure DevOps и откройте нужный проект.
- В этом проекте перейдите к странице Pipelines (Конвейеры). Затем нажмите New pipeline (Создать конвейер).
- Выберите один из следующих вариантов для вашего кода?
- GitHub: вы можете быть перенаправлены на GitHub для входа. Для этого введите учетные данные GitHub. При первом подключении к GitHub мастер также описывает процесс подключения DevOps к учетным записям GitHub.
- Azure Repos Git: вы сразу же сможете выбрать репозиторий в текущем проекте DevOps.
- Когда появится список репозиториев, выберите репозиторий с примером приложения.
- Azure Pipelines анализирует репозиторий и в разделе "Настройка конвейера " содержит список потенциальных шаблонов. Выберите соответствующий шаблон приложения-функции для вашего языка. Если вы не видите правильный шаблон, выберите "Показать больше".
- Щелкните Save and run (Сохранить и запустить), затем выберите Commit directly to the main branch (Зафиксировать непосредственно в главной ветви) и снова щелкните Save and run (Сохранить и запустить).
- Будет выполнен новый запуск. Дождитесь завершения задания.
Примеры конвейеров сборки 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.
Следующие шаги
- Ознакомьтесь с обзором решения "Функции Azure".
- Ознакомьтесь с обзором Azure DevOps.