Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services | Azure DevOps Server 2022
В этой статье объясняется, как использовать Azure Pipelines для автоматической сборки, тестирования и развертывания веб-приложения в Службе приложений Azure. Вы можете настроить конвейер непрерывной интеграции и непрерывной доставки (CI/CD), который выполняется при каждом изменении кода в назначенную ветвь репозитория.
Конвейеры состоят из этапов, заданий и шагов. Шаг является наименьшим стандартным блоком конвейера и может быть скриптом или задачей, которая является предварительно упакованым скриптом. Дополнительные сведения о ключевых понятиях и компонентах, составляющих конвейер, см. в основных понятиях Azure Pipelines.
Задачу веб-приложения Azure можно использовать в конвейере для развертывания в Службе приложений. Для более сложных сценариев, таких как использование XML-параметров в развертываниях, можно использовать задачу развертывания службы приложений Azure .
Предпосылки
Работающее приложение Службы приложений Azure с кодом, размещенным на GitHub или Azure Repos. Для создания примера приложения можно использовать любую из следующих статей краткого руководства:
- ASP.NET Core: создание веб-приложения ASP.NET Core в Azure
- ASP.NET . Создание веб-приложения ASP.NET Framework в Azure
- JavaScript: создание веб-приложения Node.js в Службе приложений Azure
- Java: создание приложения Java в Службе приложений Azure
- Python: создание приложения Python в Службе приложений Azure
Организация Azure DevOps с возможностью запуска конвейеров на размещенных майкрософт агентах. Необходимо запросить бесплатный уровень параллельных заданий или приобрести параллельные задания. Дополнительные сведения см. в разделе "Настройка и оплата параллельных заданий".
Проект, созданный в организации Azure DevOps, где у вас есть разрешение на создание и авторизацию конвейеров и подключений к службам Azure. Создайте проект в Azure DevOps.
Это важно
Во время процедур GitHub может потребоваться создать подключение службы GitHub или перенаправить его на GitHub для входа, установить приложение GitHub Azure Pipelines, авторизовать Azure Pipelines или пройти проверку подлинности в организациях GitHub. Следуйте инструкциям на экране, чтобы завершить необходимые процессы. Дополнительные сведения см. в разделе Доступ к репозиториям GitHub.
Создание конвейера
Примеры кода в этом разделе предназначены для веб-приложения ASP.NET Core. Инструкции можно адаптировать для других платформ. Дополнительные сведения о поддержке экосистемы Azure Pipelines см. в примерах экосистемы Azure Pipelines.
Определите конвейер, создав azure-pipelines.yml YAML-файл в репозитории кода.
- В меню навигации слева для проекта Azure DevOps выберите Pipelines.
- На странице "Конвейеры" выберите "Создать конвейер" или "Создать конвейер ", если этот конвейер является первым в проекте.
- На экране "Где находится код " выберите расположение исходного кода Azure Repos Git или GitHub. При необходимости войдите в GitHub.
- На экране "Выбор репозитория" выберите репозиторий кода.
- На экране "Настройка конвейера" выберите "Начальный конвейер".
Добавьте задачу .NET Core (DotNetCoreCLI@2) в конвейер и создайте и опубликуйте приложение.
- На экране проверки конвейера YAML удалите весь код после
steps:строки. - Выберите конец файла и нажмите кнопку "Показать помощника " справа.
- В разделе "Задачи" выберите .NET Core.
- На экране конфигурации .NET Core в разделе подключения Azure Resource Manager выберите подписку Azure, а затем нажмите кнопку "Авторизовать ", чтобы создать необходимое подключение к службе.
- В разделе "Команда" выберите "Опубликовать".
- Установите флажки " Опубликовать веб-проекты " и " Zip-опубликованные проекты " и нажмите кнопку "Добавить".
- Задача появится в конвейере YAML. Просмотрите код YAML, чтобы узнать, что это делает. Когда вы будете готовы, нажмите кнопку "Сохранить и запустить", а затем нажмите кнопку "Сохранить и снова запустить ".
- На экране "Сводка сборки" в разделе "Задания" выберите нужную ссылку "Разрешение ". На экране "Проверки " выберите "Разрешить" и снова нажмите кнопку "Разрешить ". Предоставление разрешения здесь позволяет использовать подключение службы, авторизованное для всех запусков этого конвейера.
Конвейер публикует ZIP-файл развертывания в качестве артефакта Azure для задачи развертывания, используемой на следующем шаге.
Добавление задачи развертывания
После успешного запуска конвейера добавьте задачу развертывания.
- На экране запуска конвейера выберите значок "Дополнительные действия " в правом верхнем углу и нажмите кнопку "Изменить конвейер".
- Выберите конец ФАЙЛА YAML и выберите "Показать помощник ", если список задач не отображается.
- В списке задач найдите и выберите задачу веб-приложения Azure . Кроме того, можно использовать задачу развертывания службы приложений Azure .
- На экране конфигурации веб-приложения Azure в подписке Azure выберите то же подключение службы, которое вы настроили для предыдущего шага. Вам не нужно повторно выполнять проверку подлинности этого подключения.
- Для типа приложения выберите веб-приложение Azure в Linux или веб-приложении Azure в Windows в зависимости от кода.
- В поле "Имя приложения" выберите или введите имя приложения службы приложений.
- Нажмите кнопку "Добавить".
- Выберите "Проверить и сохранить", а затем нажмите кнопку "Сохранить".
- Нажмите кнопку "Выполнить", а затем снова нажмите кнопку "Выполнить ".
Полный конвейер YAML должен выглядеть следующим образом:
trigger:
- <branch-specification>
pool:
vmImage: <agent-specification>
steps:
- task: DotNetCoreCLI@2
inputs:
azureSubscription: '<your-authorized-service-connection>'
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<your-authorized-service-connection>'
appType: 'webApp'
appName: '<your-app-name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
deploymentMethod: 'auto'
-
azureSubscription: имя авторизованного подключения службы к подписке Azure. -
appName: имя существующего приложения. -
package: путь к файлу пакета или папки, содержащей содержимое службы приложений. Поддерживаются подстановочные знаки.
Примеры
В следующих разделах рассматривается создание различных типов конвейеров сборки и выпуска.
Развертывание в виртуальном приложении
Задача веб-приложения Azure развертывается в корневом приложении в веб-приложении Azure. Вы можете развернуть в определенном виртуальном приложении с помощью VirtualApplication свойства задачи развертывания Службы приложений Azure .
- task: AzureRmWebAppDeployment@5
inputs:
VirtualApplication: '<name of virtual application>'
VirtualApplication — это имя виртуального приложения, настроенного на портале Azure. Дополнительные сведения см. в статье "Настройка приложения службы приложений" на портале Azure.
Развертывание в слоте
В примере ниже показано, как выполнить развертывание в промежуточном слоте, а затем переключиться на рабочий слот:
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
appName: '<app-name>'
deployToSlotOrASE: true
resourceGroupName: '<name of resource group>'
slotName: staging
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<service-connection-name>'
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
-
azureSubscription: подключение службы Azure. -
appType: необязательный тип приложения, напримерwebAppLinuxдля развертывания в веб-приложении в Linux. -
appName: имя существующего приложения. -
deployToSlotOrASE: булевский. Следует ли развертывать в существующем слоте развертывания или среде службы приложений. -
resourceGroupName: имя группы ресурсов для развертывания в, необходимо, еслиdeployToSlotOrASEзадано значение true. -
slotName: имя слота для развертывания в, необходимо, еслиdeployToSlotOrASEимеет значение true. По умолчанию —production. -
package: путь к файлу пакета или папки, содержащей содержимое приложения. Поддерживаются подстановочные знаки. -
SourceSlot: слот отправляется в производственную среду, еслиSwapWithProductionистинно. -
SwapWithProduction: булевский. Следует ли переключать трафик исходного слота с рабочей средой.
Развертывание в нескольких веб-приложениях
Вы можете использовать задания в файле YAML, чтобы настроить конвейер развертываний. С помощью заданий можно управлять порядком развертывания в нескольких веб-приложениях.
jobs:
- job: buildandtest
pool:
vmImage: ubuntu-latest
steps:
# publish an artifact called drop
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: drop
# deploy to Azure Web App staging
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: <app type>
appName: '<staging-app-name>'
deployToSlotOrASE: true
resourceGroupName: <group-name>
slotName: 'staging'
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- job: deploy
dependsOn: buildandtest
condition: succeeded()
pool:
vmImage: ubuntu-latest
steps:
# download the artifact drop from the previous job
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
artifact: 'drop'
path: '$(Pipeline.Workspace)'
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: <app type>
appName: '<production-app-name>'
resourceGroupName: <group-name>
package: '$(Pipeline.Workspace)/**/*.zip'
Развертывание условно
Чтобы выполнить условное развертывание в YAML, используйте один из следующих методов:
- Добавьте условие к этапу.
- Выделите шаги развертывания в отдельное задание и добавьте условие в это задание.
В следующем примере показано, как использовать условия шага для развертывания только успешных сборок, поступающих из основной ветви:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
Дополнительные сведения об условиях см. в разделе "Указание условий".
Развертывание с помощью веб-развертывания
Задача развертывания службы приложений Azure может развертываться в Службе приложений с помощью веб-развертывания.
trigger:
- main
pool:
vmImage: windows-latest
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration)'
zipAfterPublish: true
- task: AzureRmWebAppDeployment@5
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
Часто задаваемые вопросы
Какова разница между задачами AzureWebApp и AzureRmWebAppDeployment?
Задача веб-приложения Azure — это самый простой способ развертывания в веб-приложении Azure. По умолчанию вы развертываете корневое приложение в веб-приложении Azure.
Задача развертывания службы приложений Azure может обрабатывать дополнительные пользовательские сценарии, например:
- Разверните с помощью Web Deploy, если вы обычно используете процесс развертывания служб интернет-информационных служб (IIS).
- Развертывание в виртуальных приложениях.
- Развертывайте на других типах приложений, таких как приложения-контейнеры, серверы приложений, веб-задания, а также API и мобильные приложения.
Примечание.
Отдельная задача преобразования файлов также поддерживает преобразования файлов и подстановку переменных для использования в Azure Pipelines. Задачу преобразования файлов можно использовать для применения преобразований файлов и подстановок переменных для любых файлов конфигурации и параметров.
Почему появится сообщение "Недопустимый пакет службы приложений или путь к папке"?
В конвейерах YAML может возникнуть несоответствие между сохранением встроенного веб-пакета и местом поиска задачи развертывания. Задача AzureWebApp по умолчанию выбирает веб-пакет для развертывания $(System.DefaultWorkingDirectory)/**/*.zip. Если веб-пакет помещается в другое место, измените значение package параметра.
Почему появится сообщение "Публикация с помощью параметров webdeploy поддерживается только при использовании агента Windows"?
Эта ошибка возникает в задаче AzureRmWebAppDeployment при настройке задачи для развертывания с помощью веб-развертывания, но агент не работает под управлением Windows. Убедитесь, что параметр YAML vmImage указывает Windows.
pool:
vmImage: windows-latest
Почему веб-развертывание не работает при отключении базовой проверки подлинности?
Сведения об устранении неполадок при проверке подлинности идентификатора Microsoft Entra для работы с задачей развертывания службы приложений Azure см. в статье "Не удается развернуть веб-развертывание в службе приложений Azure" с помощью проверки подлинности идентификатора Microsoft Entra id из моего агента Windows.