Развертывание в Службе приложений с помощью Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

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

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

Вы будете использовать задачу веб-приложения Azure для развертывания в Службе приложений Azure в конвейере. Для более сложных сценариев, например если нужно использовать параметры XML в развертывании, можно использовать задачу развертывания Службы приложений Azure.

Предварительные требования

Создание конвейера

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

Узнайте больше о поддержке экосистемы Azure Pipelines.

  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.

  2. Выберите Конвейеры, а затем — Новый конвейер.

  3. Пройдите через шаги мастера, выбрав GitHub в качестве расположения исходного кода.

  4. Возможно, вам придется выполнить вход в GitHub. Для этого введите учетные данные GitHub.

  5. Когда появится список репозиториев, выберите свой репозиторий.

  6. Возможно, вы перейдете на сайт GitHub, чтобы установить приложение Azure Pipelines. В этом случае выберите Утвердить и установить).

  7. Когда появится вкладка Настройка, выберите на ней ASP.NET Core.

  8. Когда появится новый конвейер, просмотрите YAML, чтобы узнать функциональность. Когда будете готовы, выберите Сохранить и запустить.

Добавление задачи веб-приложения Azure

  1. Используйте помощник по задачам, чтобы добавить задачу веб-приложения Azure.

    Снимок экрана: задача веб-приложения Azure.

  2. Выберите Azure Resource Manager в качестве типа подключения и выберите подписку Azure. Обязательно авторизуйте подключение.

  3. Выберите Веб-приложение в Linux и введите azureSubscription, appName и package. YAML должен выглядеть указанным ниже образом.

  4. Выберите Веб-приложение в Linux и введите azureSubscription, appName и package. YAML должен выглядеть указанным ниже образом.

    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: dotnet build --configuration $(buildConfiguration)
      displayName: 'dotnet build $(buildConfiguration)'
    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        publishWebProjects: true
    - task: AzureWebApp@1
      inputs:
        azureSubscription: '<Azure service connection>'
        appType: 'webAppLinux'
        appName: '<Name of web app>'
        package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    
    • azureSubscription: ваша подписка Azure.
    • appName: имя существующей службы приложений.
    • package: путь к файлу пакета или папке, содержащим содержимое службы приложений. Поддерживаются подстановочные знаки.

Теперь вы готовы ознакомиться с остальной частью этой темы и узнать о некоторых наиболее распространенных изменениях для настройки развертывания веб-приложения Azure.

Использование задачи веб-приложения Azure

Задача развертывания веб-приложения Azure — это самый простой способ развертывания в веб-приложении Azure. По умолчанию развертывание выполняется в корневое приложение в веб-приложении Azure.

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

Развертывание пакета веб-развертывания

Чтобы развернуть пакет веб-развертывания ZIP (например, из веб-приложения ASP.NET) в веб-приложение Azure, добавьте следующий фрагмент кода в файл azure-pipelines.yml:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of web app>'
    package: $(System.DefaultWorkingDirectory)/**/*.zip    
  • azureSubscription: ваша подписка Azure.
  • appName: имя существующей службы приложений.
  • package: путь к файлу пакета или папке, содержащим содержимое службы приложений. Поддерживаются подстановочные знаки.

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

Сведения о подключениях к службам Azure см. в следующем разделе.

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

Если вы создаете приложение .NET Core, используйте следующий фрагмент кода для развертывания сборки в приложении.

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: 'webAppLinux'
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
  • azureSubscription: ваша подписка Azure.
  • appType: ваш тип веб-приложения.
  • appName: имя существующей службы приложений.
  • package: путь к файлу пакета или папке, содержащим содержимое службы приложений. Поддерживаются подстановочные знаки.

Использование подключения службы

Чтобы выполнить развертывание в Службе приложений Azure, необходимо использовать подключение службы Azure Resource Manager. Подключение службы Azure сохраняет учетные данные для подключения из Azure Pipelines или Azure DevOps Server к Azure.

Ознакомьтесь с дополнительными сведениями о подключениях службы Azure Resource Manager. Если подключение к службе не работает должным образом, изучите статью Устранение неполадок с подключениями службы.

Для задачи AzureWebApp потребуется подключение службы Azure. Подключение службы Azure сохраняет учетные данные для подключения из Azure Pipelines к Azure. См. статью Создание подключения службы Azure.

Развертывание в виртуальном приложении

По умолчанию развертывание выполняется в корневое приложение в веб-приложении Azure. Вы можете выполнить развертывание в определенном виртуальном приложении с помощью свойства VirtualApplication задачи AzureRmWebAppDeployment:

- task: AzureRmWebAppDeployment@4
  inputs:
    VirtualApplication: '<name of virtual application>'

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

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

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

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: webAppLinux
    appName: '<name of web app>'
    deployToSlotOrASE: true
    resourceGroupName: '<name of resource group>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: webAppLinux
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: ваша подписка Azure.
  • appType: (необязательно) использовать webAppLinux для развертывания в веб-приложении в Linux.
  • appName: имя существующей службы приложений.
  • deployToSlotOrASE: логическое значение. Развертывание в существующем слоте развертывания или в среде Службы приложений Azure.
  • resourceGroupName: имя группы ресурсов. Является обязательным, если параметр deployToSlotOrASE равен true.
  • slotName: имя слота по умолчанию — production. Является обязательным, если параметр deployToSlotOrASE равен true.
  • SourceSlot: слот, отправляемый в рабочую среду, когда SwapWithProduction имеет значение true.
  • 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: '<Azure service connection>'
      appType: <app type>
      appName: '<name of test stage web app>'
      deployToSlotOrASE: true
      resourceGroupName: <resource 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: '<Azure service connection>'
      appType: <app type>
      appName: '<name of test stage web app>'
      resourceGroupName: <resource group name>
      package: '$(Pipeline.Workspace)/**/*.zip'

Внесение изменений в конфигурацию

Для стеков большинства языков параметры приложения и строки подключения можно задать как переменные среды во время выполнения.

Параметры приложения можно также разрешить из Key Vault с помощью ссылок на Key Vault.

Для разработчиков ASP.NET и ASP.NET Core настройка параметров приложения в Службе приложений похожа на настройку их в <appSettings> в Web.config. Перед развертыванием в целевом объекте веб-приложения может потребоваться применить определенную конфигурацию в нем. Это полезно при развертывании одной сборки в нескольких веб-приложениях в конвейере. Например, если файл Web.config содержит строку подключения с именем connectionString, ее значение можно изменить перед развертыванием в каждом веб-приложении. Это можно сделать, применив преобразование Web.config или заменив переменные в файле Web.config.

Задача развертывания Службы приложений Azure позволяет пользователям изменять параметры конфигурации в файлах конфигурации (файлы CONFIG) внутри веб-пакетов и XML-файлов параметров (parameters.xml) в зависимости от указанного имени этапа.

Примечание

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

Подстановка переменных

В следующем фрагменте кода приведен пример подстановки переменных:

jobs:
- job: test
  variables:
    connectionString: <test-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Test stage Azure service connection>'
      WebAppName: '<name of test stage web app>'
      enableXmlVariableSubstitution: true

- job: prod
  dependsOn: test
  variables:
    connectionString: <prod-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Prod stage Azure service connection>'
      WebAppName: '<name of prod stage web app>'
      enableXmlVariableSubstitution: true

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

В YAML можно использовать один из следующих приемов:

  • Выделите шаги развертывания в отдельное задание и добавьте условие в это задание.
  • Добавьте условие к этапу.

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

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<name of web app>'

Дополнительные сведения об условиях приведены в статье Задание условий.

(Классическая модель) Развертывание конвейера выпуска

Конвейер выпуска можно использовать для получения опубликованных сборкой артефактов и их последующего развертывания на веб-сайте Azure.

  1. Чтобы приступить к созданию конвейера выпуска:

    • Если вы только что завершили сборку CI, выберите ссылку (например, сборка 20170815.1), чтобы открыть сводку сборки. Затем выберите Выпуск, чтобы запустить новый конвейер выпуска, автоматически связанный с конвейером сборки.

    • Откройте вкладку Выпуски в Azure Pipelines, откройте раскрывающийся список конвейеров выпуска + и выберите Создать конвейер выпуска.

  2. Самый простой способ создать конвейер выпуска — использовать шаблон. При развертывании приложения Node.js выберите Развернуть приложение Node.js в Службе приложений Azure. В противном случае выберите шаблон развертывания Службы приложений Azure. Нажмите кнопку Применить.

    Примечание

    Единственное различие между этими шаблонами заключается в том, что шаблон Node.js настраивает задачу для создания файла web.config, содержащего параметр, который запускает службу iisnode.

  3. Если вы создали новый конвейер выпуска из сводки сборки, убедитесь, что конвейер сборки и артефакт отображаются в разделе Артефакты на вкладке Конвейер. Если вы создали новый конвейер выпуска на вкладке Выпуски, выберите ссылку + Добавить, а затем выберите артефакт сборки.

  4. Выберите значок непрерывного развертывания в разделе Артефакты, убедитесь, что триггер непрерывного развертывания включен, и добавьте фильтр для включения главной ветви.

    Примечание

    Непрерывное развертывание по умолчанию не включено при создании конвейера выпуска на вкладке Выпуски.

  5. Откройте вкладку Задачи и выберите Этап 1. Настройте переменные свойств задачи следующим образом:

    • Подписка Azure: выберите подключение из списка Доступные подключения к службе Azure или создайте подключение с ограниченными разрешениями к вашей подписке Azure. Если вы используете Azure Pipelines и видите кнопку Авторизовать рядом с входными данными, нажмите на нее, чтобы разрешить Azure Pipelines подключение к подписке Azure. Если вы используете TFS или не видите нужную подписку Azure в списке подписок, см. статью Подключение службы Azure Resource Manager, чтобы настроить подключение вручную.

    • Имя Службы приложений: выберите имя веб-приложения из подписки.

    Примечание

    Некоторые параметры для задач могли быть автоматически определены как переменные этапа при создании конвейера выпуска на основе шаблона. Эти параметры невозможно изменить в параметрах задачи. Чтобы изменить их, необходимо выбрать родительский элемент этапа.

  6. Сохраните конвейер выпуска.

Создание выпуска для развертывания приложения

Теперь все готово для создания выпуска — запуска конвейера выпуска с артефактами, созданными определенной сборкой. Это приведет к развертыванию сборки:

  1. Щелкните + Выпуск и выберите Создать выпуск.

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

  3. Перейдите по ссылке на выпуск в сообщении на информационной панели. Пример: "Создан выпуск Release-1".

  4. В представлении конвейера выберите ссылку состояния на этапах конвейера, чтобы просмотреть журналы и выходные данные агента.

  5. После завершения выпуска перейдите к работающему в Azure сайту с помощью URL-адреса веб-приложения http://{web_app_name}.azurewebsites.net, и проверьте его содержимое.

Дальнейшие действия