Данная публикация показывает, как можно настроить среду развертывания и тестирования с использованием Docker в Visual Studio Team Services. Общий процесс можно просмотреть здесь: https://www.youtube.com/watch?v=yrqy5PKrNao
Краткое описание тестируемого решения
Для тестирования процедуры используется следующее демонстрационное решение. Решение позволяет выполнять произвольные запросы к двум тестовым базам данных через консольное приложение-клиент. При этом префикс ‘TST1=>’ и ‘TST2=>’ маршрутизирует запрос к соответствующей базе.
Решение состоит из следующих проектов:
-
FirstServiceApp – решение, которое запускает первый само-размещаемый WCF сервис. При этом запуск сервиса выполняется через nugget пакет TopShell.
-
SecondServiceApp – решение, которое запускает второй само-размещаемый WCF сервис.
-
WcfFirstService – первый WCF сервис, который работает с первой базой данных.
-
WcfSecondService – второй WCF сервис, который работает со второй базой данных.
-
WcfWebApp – основной WCF сервис, который размещается на IIS и взаимодействует с первым и вторым WCF сервисами, предоставляя соответствующие методы.
-
WcfWebAppClient – клиентское приложение для основного WCF сервиса.
Архитектура решения следующая:
Рисунок 1. Архитектура решения
Последовательность использования решения на месте разработчика
Особенностью использования в данном режиме является то, что вся среда настроена на работу в сети NAT локального компьютера.
Примечание. Шаги приведены с учетом, что использует рабочее место в ажуре на основе Windows Server 2016 with containers, на котором развернуты VS 2015 и SQL Server 2016. Для работы сервисов необходима утилита docker-compose, которую можно скачать здесь https://github.com/docker/compose/releases и разместить здесь: «C:\Program Files\Docker\docker-compose.exe»
Шаги развертывания и запуска решения:
-
Распаковать архив решения в необходимо место.
-
Обновить информацию о сетевых настройках.
-
Выполнить команду получения информации о сети:
-
docker network inspect nat
-
Получить информацию о используемой подсети и шлюзе. Пример части ответа предыдущей команды:
«IPAM»: {
«Driver»: «windows»,
«Options»: null,
«Config»: [
{
«Subnet»: «172.25.16.0/20»,
«Gateway»: «172.25.16.1»
}
]
},
-
Открыть разархивированный проект.
-
Обновить эту информацию в файлах hosts_dev.bat в проекте WcfWebAppClient и каталоге DockerCompose.
-
Обновить информацию в файле «docker-compose.yml».
-
Далее необходимо пересобрать проект, что создаст структуру для запуска контейнеров в каталоге «C:\DockerCompose»
-
На следующем шаге необходимо опубликовать веб-сайт из проекта «WcfWebApp».
-
Открыть командную строку и перейти в каталог «DockerCompose»
cd c:\DockerCompose
-
Запустить команду «docker-compose» для сборки образов:
docker-compose build
-
Запустить команду «docker-compose» для запуска сервисов:
docker-compose up -d
-
Проверить работоспособность сервисов можно через команду «docker-compose ps»
-
Чтобы подключиться к сервисам и проверить работу необходимо запустить решение WcfWebAppClient из сборки отладочного каталога (bin/Debug). При этом нужно проверить ip-адрес подключения к основному сервису в файле настройки, чтоб он соответствовал подсети, которая настроена для сети nat (шаг 2).
Последовательность использования решения при непрерывной интеграции
Общая архитектура решения отражена на рисунке ниже:
Описание решения:
-
Исходный код размещается на Visual Studio Team Services в репозитории GIT или TFVC.
-
Разработчик подключается VSTS и изменяет исходный код.
-
После регистрации изменений выполняется автоматический запуск процесса сборки на сервере Build Server. На сервере сборки выполняется:
-
Сборка исходного кода/выполнение модульных тестов.
-
Сборка образов для контейнеров.
-
Публикация образов на приватном сервере реестра контейнеров Azure Registry Server.
-
-
(Данный шаг может выполняться в режиме непрерывного развертывания) Разработчик выполняет создание нового релиза, что запускает выполнение следующих шагов:
-
Скачивание образов из приватного сервера реестра
-
Запуск сервисов на Stage Server.
-
Примечание. Шаги приведены с учетом, что:
-
Создан проект в Visual Studio Team Services. https://www.visualstudio.com/en-us/docs/setup-admin/create-team-project
-
Установлен агент сборки: https://www.visualstudio.com/en-us/docs/build/concepts/agents/agents
-
Build и Stage Server развернуты в ажуре на основе Windows Server 2016 with containers.
-
На Build и Stage Server необходима утилита docker-compose, которую можно скачать здесь https://github.com/docker/compose/releases и разместить здесь: «C:\Program Files\Docker\docker-compose.exe»
-
На Build Server развернута VS 2015
-
На Stage Server развернут SQL Server 2016 и развернуты базы TestDB и TestDB1.
Шаги развертывания и запуска решения:
-
Решение для примера распаковывается и ставить под версионный контроль проекта в Visual Studio Team Services.
-
На Stage Server необходимо просмотреть настройки сети и обновить их в файлах «hosts.bat» и «docker-compose_prod.yml». См. Раздел 3.2, шаг 2.
-
Настраивается новая сборка для решения, в которой настраиваются следующие шаги:
-
Шаг непосредственной сборки решения:
-
-
Публикация сайта с сервисом в запакованном zip архиве
Аргументы: /p:OutDir=$(build.stagingDirectory)/package /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true
-
Копирование результатов сборки решения.
-
Копирование результатов сборки сайта в общий каталог результатов
-
Копирование результатов сборки сайта в рабочий каталог для формирования контейнера.
-
Запуск скрипта для обновления информации настроек Application Insights и докера.
-
Публикация результатов сборки на сервер TFS.
-
Запуск скрипта для сборки контейнеров и публикации на приватный реестр.
-
Для сборки настраиваются переменные для подключения к приватному реестру контейнеров. Имя сервера нужно обновить в самом файле «publish.bat»:
-
Настраивается релиз, который на основе сборки формирует контейнеры с сервисами. Пример шагов для среды развертывания:
-
Копирование исходного файла настройки «docker-compose_src.yml» для запуска сервисов.
-
-
Запуск скрипта для генерирования правильного конфигурационного файла для контейнеров.
-
Запуск командной строки для подключения к удаленному реестру контейнеров.
-
Запуск командной строки для сборки и запуска набора контейнеров