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

Создание проекта .NET

если у вас нет проекта .net для работы, создайте новый и отправьте код в репозиторий GitHub или Azure Repos. Начните с установки последнего пакета SDK для .net 6,0.

Создайте новый webapp .NET 6.

dotnet new webapp -f net6.0

В том же сеансе терминала запустите приложение локально с помощью dotnet run команды из каталога проекта.

dotnet run

Отправка кода

Upload код в новый GitHub webapp или Azure Repos:

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

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

  2. перейдите в Pipelines, а затем выберите создать конвейер.

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

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

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

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

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

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

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

  1. Добавьте задачу " веб-приложение Azure " с помощью помощника по задачам.

    Azure web app task.

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

  3. Выберите веб-приложение в Linux и введите , 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: путь к файлу пакета или папке, содержащим содержимое службы приложений. Поддерживаются подстановочные знаки.

мы не рекомендуем новым пользователям использовать конвейеры YAML для развертывания из Azure DevOps Server 2019. Если вы опытный пользователь конвейера и у вас уже есть конвейер YAML для создания приложения .NET Core, вы можете найти приведенные ниже примеры.

Конвейеры YAML недоступны в TFS.

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

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

Самый простой способ развертывания в веб-приложении Azure — использовать задачу веб-приложения Azure ( ).

Развертывание пакета веб-развертывание (ASP.NET)

чтобы развернуть пакет веб-развертывание .zip (например, из веб-приложения ASP.NET) в веб-приложение Azure, добавьте следующий фрагмент кода в файл азуре-пипелинес. 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: путь к файлу пакета или папке, содержащим содержимое службы приложений. Поддерживаются подстановочные знаки.

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

Если вы создаете приложение Node.js JavaScript, вы публикуете все содержимое рабочего каталога в веб-приложении. Этот фрагмент также создает файл Web.config во время развертывания, если приложение не содержит его и запускает обработчик iisnode в веб-приложении Azure:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connections>'
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)'
    customWebConfig: '-Handler iisnode -NodeStartFile server.js -appType node'
  • azureSubscription: ваша подписка Azure.
  • appName: имя существующей службы приложений.
  • package: путь к файлу пакета или папке, содержащим содержимое службы приложений. Поддерживаются подстановочные знаки.
  • кустомвебконфиг: создание параметров web.config для приложений Python, Node.js, Go и Java. Стандартный web.config файл будет создан и развернут в службе приложений Azure, если у приложения его нет.

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

Конвейеры YAML недоступны в TFS.

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

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

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

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

Конвейеры YAML недоступны в TFS.

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

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

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

Конвейеры YAML недоступны в TFS.

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

В веб-приложении 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.
  • типприложения (необязательно) . Используйте для развертывания в веб-приложении на платформе Linux.
  • appName: имя существующей службы приложений.
  • деплойтослоторасе: Boolean. Выполните развертывание в существующий слот развертывания или Среда службы приложений Azure.
  • resourceGroupName: имя группы ресурсов. Обязательный deployToSlotOrASE , если имеет значение true.
  • slotName: имя слота, по умолчанию — . Обязательный deployToSlotOrASE , если имеет значение true.
  • Саурцеслот: слот отправляется в рабочую среду , если имеет значение true.
  • Свапвиспродуктион: Boolean. Переключить трафик исходного слота в рабочую среду.

Конвейеры YAML недоступны в TFS.

Развертывание в нескольких веб-приложениях

Задания в файле 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'

Конвейеры YAML недоступны в TFS.

Изменения конфигурации

Для большинства стеков языков Параметры приложения и строки подключения можно задать в качестве переменных среды во время выполнения. Параметры приложения можно также разрешить из 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 недоступны в TFS.

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

Вы можете развернуть только определенные сборки в веб-приложении Azure.

Чтобы сделать это в YAML, можно использовать один из следующих методов:

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

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

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

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

Конвейеры YAML недоступны в TFS.

Классические Развертывание с помощью конвейера выпуска

Вы можете использовать конвейер выпуска, чтобы выбрать артефакты, опубликованные сборкой, а затем развернуть их на веб-сайте Azure.

  1. Выполните одно из следующих действий, чтобы приступить к созданию конвейера выпуска.

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

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

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

    Примечание

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

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

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

    Примечание

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

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

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

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

    Примечание

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

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

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

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

  1. Выберите + Release (+ выпуск ) и выберите создать выпуск.

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

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

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

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

Развертывание в облаке Azure для государственных организаций или Azure Stack

Создайте подходящее подключение к службе:

Механизмы развертывания

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

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

Если вы используете агент Linux, задача полагается на API- интерфейсы KUDU.

Один из них стоит проверить перед развертыванием — это список ограничений доступа службы приложений Azure. Этот список может включать IP-адреса или подсети виртуальной сети Azure. Если имеется одна или несколько записей, в конце списка существует неявный "Deny All". Сведения о том, как изменить правила ограничения доступа к приложению, см. в разделе Добавление и изменение правил ограничения доступа в портал Azure. Можно также изменить или ограничить доступ к сайту управления системой управления версиями (SCM).

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

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

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

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | Team Foundation Server 2018 | Team Foundation Server 2017

Примечание

В Microsoft Team Foundation Server (TFS) 2018 и предыдущих версий конвейеры сборки и выпуска называются определениями, выполнения называются сборками, подключения к службам называются конечными точками служб, этапы называются средами, а задания называются этапами.

Azure Pipelines можно использовать для непрерывного развертывания веб-приложения в службе приложений Azure при каждой успешной сборке.

Служба приложений Azure — это управляемая среда для размещения веб-приложений, интерфейсов API и мобильных серверных компонентов. Вы можете разрабатывать свои любимые языки, в том числе .NET, Python и JavaScript.

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

Сведения о развертывании в веб-приложении Azure для контейнеров Linux см. в статье развертывание контейнера веб-приложения Azure.

Примечание

это руководство применимо к Team Foundation Server (TFS) версии 2017,3 и более поздних.

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

Убедитесь, что у вас есть указанные ниже компоненты.

  • учетная запись GitHub, в которой можно создать репозиторий. Если у вас нет такой учетной записи, вы можете создать ее бесплатно.

  • Организация Azure DevOps. Если у вас нет такой учетной записи, вы можете создать ее бесплатно. (Организация Azure DevOps отличается от организации GitHub. Вы можете задать своей организации DevOps и организации GitHub одинаковое имя, если вам нужно их соответствие.)

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

  • Возможность запуска конвейеров на размещенных агентах Майкрософт. Вы можете приобрести параллельное задание или запросить уровень "Бесплатный". Чтобы запросить уровень "Бесплатный", следуйте инструкциям из этой статьи. Обратите внимание, что для предоставления уровня "Бесплатный" может потребоваться 2–3 рабочих дня.

Создание службы приложений Azure на портал Azure

создайте службу приложений Azure в Linux или Windows с Azure Cloud Shell. Чтобы начать работу:

  1. Войдите на портал Azure.
  2. Запустите Cloud Shell с помощью верхней области навигации портала. Open the Cloud Shell.

Дополнительные сведения см. в обзоре Azure Cloud Shell.

Создание службы приложений Azure в Linux.

# Create a resource group
az group create --location eastus2 --name myapp-rg

# Create an app service plan of type Linux
az appservice plan create -g myapp-rg -n myapp-service-plan --is-linux

# Create an App Service from the plan 
az webapp create -g myapppipeline-rg -p myapp-service-plan -n my-app-dotnet --runtime "DOTNETCORE|3.1" 

Создание приложения с помощью Azure Pipelines