Статьи

Агент Azure DevOps с Docker Compose

Узнайте больше об использовании Docker для Azure DevOps Linux Build Agent с Docker Compose.

В прошлом я имел дело с использованием Docker для агента сборки Azure DevOps Linux в посте « Настройка агента VSTS Linux с Docker за считанные минуты» , и я писал о том, как использовать Docker внутри определения сборки, чтобы иметь некоторые предварительные условия. для тестирования (например, MongoDB и SQL Server). Теперь пришло время сделать шаг вперед и использовать Docker.


Вам также может понравиться: 
Руководство разработчика по Docker — Docker Compose

Использование команд Docker в определении конвейера хорошо, но у него есть некоторые недостатки: во- первых, этот подход страдает с точки зрения скорости выполнения, поскольку контейнер должен запускаться каждый раз, когда вы запускаете сборку (и должен останавливаться в конце сборки ). Действительно, если образ Docker уже присутствует в агенте, время запуска компьютера не так велико, но некоторые образы, такие как MsSQL, работают не сразу, поэтому вам нужно подождать, пока они будут готовы. за каждую сборку . Альтернативой является оставить их запущенными, даже если сборка завершена, но это может привести к исчерпанию ресурсов.

Другая проблема — это зависимость от движка Docker. Если я включу команды Docker в определение сборки, я могу строить только на машине, на которой установлен Docker. Если в большинстве моих проектов используются MongoDB, MsSQL и Redis, я могу просто установить все три на моей машине сборки, используя быстрый SSD в качестве хранилища. В этом сценарии я ожидаю использовать свои физические экземпляры, а не ждать, пока Docker раскрутит новый контейнер.

Включение команд Docker в определение конвейера — это хорошо, но это связывает конвейер с Docker и может сказаться на скорости выполнения.

То, что я хотел бы сделать, это использовать Docker для раскрутки агента и всех необходимых зависимостей одновременно. Затем мы используем этот агент со стандартной сборкой, для которой не требуется Docker. Это дает мне гибкость настройки машины для сборки со всем предустановленным или просто использовать Docker для раскрутки в считанные секунды агента, который может собрать мой код. Удаление зависимости Docker из моего определения конвейера дало пользователю максимальную гибкость.

Для моего первого эксперимента я также хочу использовать Docker в Windows 2109 для использования контейнера Windows.

First of all, you can read the nice MSDN article about how to create a Windows Docker image that downloads, install and run an agent inside a Windows server machine with Docker for Windows. This allows you to spin out a new Docker Agent based on Windows image in minutes (just the time to download and configure the agent).

Thanks to Windows Containers, running an Azure DevOps agent based on Windows is a simple Docker Run command.

Now, I need that agent to be able to use MongoDB and MsSQL to run integration tests. Clearly, I can install both DB engines on my host machine and let the Docker agent use them, but since I’ve already used my agent in Docker, I wish for my dependencies to also run in Docker. So, welcome Docker Compose!

Thanks to Docker Compose, I can define a YAML file with a list of images that are part of a single scenario, so I specified an agent image followed by a SQL Server and MongoDB images. The beauty of Docker Compose is the ability to refer to other container machines by name. Let’s do an example; here is my complete Docker compose YAML file.

YAML