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

Завершено

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

В этом модуле вы:

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

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

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

  1. В Azure DevOps перейдите к Pipelines.

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

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

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

    снимок экрана Azure Pipelines с расположением URL-адреса веб-сайта.

  4. Вы должны увидеть, как ваше веб-приложение работает в службе приложений.

    снимок экрана веб-сайта Space Game.

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