Упражнение. Развертывание контейнера Docker в Azure
Проект пришел с конвейером выпуска, который создает проекты в решении и развертывает веб-приложение в его Служба приложений. Теперь пришло время обновить сборку конвейера и развернуть проект в качестве контейнера.
В этом уроке рассматриваются следующие задачи:
- Определите некоторые переменные конвейера, чтобы упростить обслуживание конвейера сборки.
- Замените существующие задачи сборки унифицированной задачей для сборки и отправки контейнера Docker.
- Замените существующую задачу развертывания на ту, которая обновляет веб-приложение Служба приложений новым образом контейнера.
- Сохраните конвейер для активации сборки и выпуска.
Определение общих переменных в конвейере
Здесь вы добавите новую переменную конвейера в существующий конвейер YAML, определенный в azure-pipelines.yml.
В Azure DevOps перейдите к Конвейерам.
Выберите конвейер.
Выберите Изменить. Убедитесь, что ветвь имеет значение main , выбрав ее в раскрывающемся меню. Откроется файл azure-pipelines.yml.
Добавьте выделенную строку ниже, чтобы добавить переменные конвейера с именем
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)
Сохранение конвейера для активации сборки и выпуска
Выберите "Сохранить " в правом верхнем углу страницы. Введите сообщение фиксации и нажмите кнопку "Сохранить ", чтобы подтвердить.
Нажмите Выполнить и убедитесь, что выбрана ветвь main. По завершении нажмите Запустить.
Выберите конвейер, чтобы просмотреть журналы. После успешной сборки выберите задачу AzureWebAppContainer, а затем URL-адрес приложения Службы приложений, чтобы просмотреть развернутое веб-приложение.
В Службе приложений должно отобразиться запущенное веб-приложение.
Энди: Это оказалось здорово! Я думаю, что принятие контейнеров может быть огромной победой для нашей команды.