Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Примечание.
Начиная с 1 июня 2024 года только что созданные приложения службы приложений могут создать уникальное имя узла по умолчанию, использующее соглашение об именовании <app-name>-<random-hash>.<region>.azurewebsites.net
. Например: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
. Существующие имена приложений остаются неизменными.
Дополнительные сведения см. в записи блога о создании веб-приложения с уникальным именем узла по умолчанию.
Используйте Azure Pipelines для автоматического развертывания веб-приложения для Службы приложений Azure при каждой успешной сборке. Azure Pipelines позволяет создавать, тестировать и развертывать, используя непрерывную интеграцию и доставку (CI/CD) через Azure DevOps.
Конвейеры YAML определяются с помощью ФАЙЛА YAML в репозитории. Шаг является наименьшим стандартным блоком конвейера и может быть скриптом или задачей (предварительно упакованым скриптом). Узнайте о ключевых понятиях и компонентах, составляющих конвейер.
Вы используете задачу веб-приложения Azure (AzureWebApp
) для развертывания в службе приложений Azure в вашем конвейере. Для более сложных сценариев, например при необходимости использования XML-параметров в развертывании, можно использовать задачу AzureRmWebAppDeployment
развертывания службы приложений Azure.
Необходимые условия:
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Организация Azure DevOps. Создайте ее бесплатно.
- Возможность запуска пакетов задач на агентах, размещенных корпорацией Майкрософт. Вы можете приобрести параллельное задание или запросить бесплатный уровень.
- Работающее приложение Службы приложений Azure с кодом, размещенным на GitHub или Azure Repos.
- .NET. Создание веб-приложения ASP.NET Core в Azure.
- ASP.NET. Создание веб-приложения ASP.NET Framework в Azure.
- JavaScript. Создание веб-приложения Node.js в Службе приложений Azure.
- Java: создание приложения Java в Службе приложений Azure.
- Python: создание приложения Python в Службе приложений Azure.
1. Создание конвейера для стека
В примерах кода в этом разделе предполагается, что вы развертываете ASP.NET веб-приложение. Инструкции можно адаптировать для других платформ.
Узнайте больше о поддержке экосистемы Azure Pipelines.
Войдите в свою организацию Azure DevOps и откройте нужный проект.
Перейдите к конвейерам и выберите "Создать конвейер".
При появлении запроса выберите расположение исходного кода: Azure Repos Git или GitHub.
Возможно, вас перенаправят на GitHub для выполнения входа. Для этого введите учетные данные GitHub.
Когда появится список репозиториев, выберите свой репозиторий.
Вы можете перенаправиться на GitHub, чтобы установить приложение Azure Pipelines. В этом случае выберите " Утвердить" и "Установить".
Когда появится вкладка Настройка, выберите на ней ASP.NET Core.
Когда появится новый конвейер, ознакомьтесь с файлом YAML, чтобы понять, что он делает. Когда будете готовы, выберите Сохранить и запустить.
2. Добавление задачи развертывания
Выберите конец YAML-файла и выберите "Показать помощник".
Используйте помощник по задачам , чтобы добавить задачу веб-приложения Azure .
Кроме того, можно добавить задачу развертывания
AzureRmWebAppDeployment
службы приложений Azure.Выберите подписку Azure. Обязательно выберите "Авторизовать" , чтобы авторизовать подключение. Авторизация создает необходимое подключение к службе.
Выберите тип приложения, имя приложения и стек среды выполнения на основе приложения Служба приложений. Полный YAML должен выглядеть примерно так, как показано в следующем коде.
variables: buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true - task: AzureWebApp@1 inputs: azureSubscription: '<service-connection-name>' appType: 'webAppLinux' appName: '<app-name>' package: '$(System.DefaultWorkingDirectory)/**/*.zip'
-
azureSubscription
: имя авторизованного подключения службы к подписке Azure. -
appName
: имя существующего приложения. -
package
: путь к пакету или папке, содержащей содержимое службы приложений. Поддерживаются подстановочные знаки.
-
Пример. Развертывание приложения .NET
Чтобы развернуть веб-пакет .zip (например, из веб-приложения ASP.NET) в веб-приложении Azure, используйте следующий фрагмент кода для развертывания сборки в приложении.
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: 'webAppLinux'
appName: '<app-name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
-
azureSubscription
: Ваша подписка Azure. -
appType
: тип веб-приложения. -
appName
: имя существующей службы приложений. -
package
: путь к пакету или папке, содержащей содержимое службы приложений. Поддерживаются подстановочные символы.
Пример. Развертывание в виртуальном приложении
По умолчанию развертывание происходит с корневым приложением в веб-приложении Azure. Вы можете развернуть определенное виртуальное приложение, используя свойство VirtualApplication
задачи развертывания Службы приложений Azure AzureRmWebAppDeployment
.
- task: AzureRmWebAppDeployment@4
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>'
appType: webAppLinux
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
-
azureSubscription
: Ваша подписка Azure. -
appType
: (необязательно) ИспользуетсяwebAppLinux
для развертывания в веб-приложении в Linux. -
appName
: имя существующей службы приложений. -
deployToSlotOrASE*
: булевский. Развертывание в существующем слоте развертывания или в среде Службы приложений Azure. -
resourceGroupName
: имя группы ресурсов. Является обязательным, если параметрdeployToSlotOrASE
равен true. -
slotName
: имя слота, для которого используется значениеproduction
по умолчанию. Является обязательным, если параметрdeployToSlotOrASE
равен true. -
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>'
Дополнительные сведения об условиях приведены в статье Указание условий.
Пример: Развертывание с использованием Web Deploy
Задача AzureRmWebAppDeployment
развертывания службы приложений 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@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
Часто задаваемые вопросы
Какова разница между AzureWebApp
задачами и AzureRmWebAppDeployment
задачами?
Задача Azure Web AppAzureWebApp
— это самый простой способ развертывания на веб-приложении Azure. По умолчанию развертывание происходит с корневым приложением в веб-приложении Azure.
Задача развертывания службы приложение Azure (AzureRmWebAppDeployment
) может обрабатывать дополнительные пользовательские сценарии, например:
- Разверните с помощью Web Deploy, если вы обычно используете процесс развертывания служб интернет-информационных служб (IIS).
- Развертывание в виртуальных приложениях.
- Развертывайте на других типах приложений, таких как приложения-контейнеры, серверы приложений, веб-задания, а также API и мобильные приложения.
Примечание.
Отдельная задача преобразования файлов также поддерживает преобразования файлов и подстановку переменных для использования в Azure Pipelines. Задачу преобразования файлов можно использовать для применения преобразований файлов и подстановок переменных для любых файлов конфигурации и параметров.
Почему появится сообщение "Недопустимый пакет службы приложений или путь к папке"?
В конвейерах YAML в зависимости от вашего конвейера может возникнуть несоответствие между местом сохранения собранного веб-пакета и местом, где задача развертывания ищет его. Например, AzureWebApp
задача выбирает веб-пакет для развертывания. Задача AzureWebApp
может выглядеть как $(System.DefaultWorkingDirectory)/**/*.zip
. Если веб-пакет помещается в другое место, измените значение package
.
Почему появится сообщение "Публикация с помощью параметров webdeploy поддерживается только при использовании агента Windows"?
Эта ошибка возникает при настройке AzureRmWebAppDeployment
задачи для развертывания с помощью веб-развертывания, но агент не работает под управлением Windows. Убедитесь, что YAML содержит что-то подобное следующему коду:
pool:
vmImage: windows-latest
Почему веб-развертывание не работает при отключении базовой проверки подлинности?
Для получения информации об устранении неполадок, связанных с проверкой подлинности идентификатора Microsoft Entra для работы с задачей AzureRmWebAppDeployment
, см. статью "Не удается выполнить веб-развертывание в службе приложений Azure с использованием проверки подлинности идентификатора Microsoft Entra из моего агента Windows".
Связанный контент
- Настройте конвейер Azure DevOps.