Упражнение. Развертывание контейнера Docker в Azure

Завершено

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

В этом уроке рассматриваются следующие задачи:

  • Определите некоторые переменные конвейера, чтобы упростить обслуживание конвейера сборки.
  • Замените существующие задачи сборки унифицированной задачей для сборки и отправки контейнера Docker.
  • Замените существующую задачу развертывания на ту, которая обновляет веб-приложение Служба приложений новым образом контейнера.
  • Сохраните конвейер для активации сборки и выпуска.

Определение общих переменных в конвейере

Здесь вы добавите новую переменную конвейера в существующий конвейер YAML, определенный в azure-pipelines.yml.

  1. В Azure DevOps перейдите к Конвейерам.

  2. Выберите конвейер.

  3. Выберите Изменить. Убедитесь, что ветвь имеет значение main , выбрав ее в раскрывающемся меню. Откроется файл azure-pipelines.yml.

  4. Добавьте выделенную строку ниже, чтобы добавить переменные конвейера с именем webRepository и tag. Они будут использоваться в нескольких задачах для уникальной идентификации конкретной версии контейнера, на которую ссылается ссылка. Вы также можете удалить buildConfiguration переменную. Она больше не понадобится.

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      webRepository: 'web'
      tag: '$(Build.BuildId)'
    

Замена задач этапа сборки

Энди: Я не думаю, что нам больше нужна какая-либо из этих задач сборки, так как Dockerfile в папке проекта уже определяет нужную сборку. Тем не менее, у меня еще нет возможности увидеть, что мы можем использовать для создания образа с помощью Dockerfile. Какие-либо идеи?

Мара: Я просто смотрел, что вверх. Кажется, что он должен иметь возможность создавать контейнер и даже отправлять его в репозиторий с одной задачей. Давайте добавим его сейчас.

Задача Docker

Задачу Docker можно использовать для создания и развертывания образов Docker. Замените весь этап сборки фрагментом кода YAML ниже.

  • команда: указывает команду Docker для выполнения.
  • buildContext: указывает путь к контексту сборки.
  • репозиторий: указывает имя репозитория.
  • dockerfile: указывает путь к Dockerfile.
  • containerRegistry: указывает имя подключения службы реестра Docker.
  • теги: указывает список тегов в отдельных строках. Эти теги используются в командах build, push и buildAndPush.
- stage: 'Build'
  displayName: 'Build and push'
  jobs:  
  - job: 'Build'
    displayName: 'Build job'
    pool:
      vmImage: 'ubuntu-20.04'
    steps:
    - task: Docker@2
      displayName: 'Build and push the image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(webRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)

Замена задачи этапа развертывания

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

Мара: Я уже на нем. Это немного отличается от развертывания сборки в Azure Pipelines, но по-прежнему достаточно прямого, чтобы мы могли выполнить задание в одной задаче. Давайте добавим его сейчас.

Задача "Веб-приложение Azure для контейнера"

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

  • appName: указывает имя существующей службы приложение Azure.
  • azureSubscription. Указывает имя подписки Azure Resource Manager для развертывания.
  • imageName: указывает полное имя образа контейнера, например myregistry.azurecr.io/nginx:latest или python:3.7.2-alpine/.
- stage: 'Deploy'
  displayName: 'Deploy the container'
  dependsOn: Build
  jobs:
  - job: 'Deploy'
    displayName: 'Deploy job'
    pool:
      vmImage: 'ubuntu-20.04'
    variables:
    - group: Release
    steps:
    - task: AzureWebAppContainer@1
      inputs:
       appName: $(WebAppName)
       azureSubscription: 'Resource Manager - Tailspin - Space Game'
       imageName: $(RegistryName)/$(webRepository):$(build.buildId)

Сохранение конвейера для активации сборки и выпуска

  1. Выберите "Сохранить " в правом верхнем углу страницы. Введите сообщение фиксации и нажмите кнопку "Сохранить ", чтобы подтвердить.

  2. Нажмите Выполнить и убедитесь, что выбрана ветвь main. По завершении нажмите Запустить.

  3. Выберите конвейер, чтобы просмотреть журналы. После успешной сборки выберите задачу AzureWebAppContainer, а затем URL-адрес приложения Службы приложений, чтобы просмотреть развернутое веб-приложение.

    Screenshot of Azure Pipelines showing the location of the website URL.

  4. В Службе приложений должно отобразиться запущенное веб-приложение.

    Screenshot of the Space Game website.

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