TeamCity + Docker: непрерывная интеграция

TeamCity помогает автоматизировать CI/CD-пайплайн на проектах любого размера и сложности благодаря использованию Docker-контейнеров на всех этапах.

Сборка в Docker-окружении

Бывает, что после отладки на локальной машине код не работает в других окружениях. TeamCity позволяет запускать сборку и тесты в Docker: приложение не привязывается к конкретной системе и будет корректно работать в любом окружении — и на машине тестировщика, и в облачном продакшн-инстансе.

Создание любого количества Docker-образов и управление ими

TeamCity поможет вам построить масштабируемую CI/CD-инфраструктуру, которой легко управлять. Решение позволяет добавить в команды Docker необходимые параметры сборки, использовать шаблоны для настройки централизованных пайплайнов и автоматизировать очистку билд-агентов и реестров Docker от неактуальных Docker-образов.

Интеграционное тестирование в контейнеризованных службах

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

Интеграция Docker в CI/CD-пайплайны

TeamCity поддерживает и позволяет ускорить любые рабочие процессы с использованием Docker. Другие CI/CD-инструменты предлагают только информацию о результатах сборки (успех или ошибка), а TeamCity обеспечивает глубокую интеграцию с Docker и предоставляет подробную информацию о пайплайнах, в том числе:

  • журналы сборки и результаты тестирования в реальном времени;
  • статистику, информацию о тенденциях и результаты проверки качества кода;
  • трассировку стека для процессов и потоков;
  • сведения об изменениях, которые привели к ошибкам сборки.

Благодаря этому вы легко найдете ошибки в сборках, выясните, что нужно исправить, и сможете быстрее предложить пользователям новые функции, при этом обеспечив более высокое качество.

Что дает интеграция TeamCity с Docker

Билд-раннер Docker

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

Подробнее — в разделе документации, посвященном билд-раннеру Docker.

Docker-обертка

Docker-обертка позволяет TeamCity запускать шаги сборки в Docker-контейнере независимо от операционной системы хоста. Это гарантирует точные и воспроизводимые результаты. TeamCity отслеживает все события во время сборки и предоставляет отчеты в реальном времени, анализ тестов и другие возможности, например трассировку стека из Docker-контейнера.

Подробнее — в разделе документации, посвященном Docker-обертке.

Билд-раннер Docker Compose

Билд-раннер Docker Compose используется для запуска Docker-контейнеров в начале сборки, а также позволяет TeamCity закрыть их после завершения или остановки сборки. Основной сценарий использования билд-раннера — выполнение интеграционных тестов, когда компоненты запускаются в контейнерах, а их выполнение описывается с помощью файлов Docker Compose. Например, сам TeamCity тестируется с различными версиями разных баз данных, используемых в качестве бэкенда, и соответствующие интеграционные тесты запускаются с помощью билд-раннера Docker Compose.

Подробнее — в разделе документации, посвященном билд-раннеру Docker Compose.

Функция Docker Support

Функция Docker Support позволяет управлять реестрами Docker. Если настроить ее на уровне проекта, она обеспечивает поддержку всех популярных сервисов, включая Docker Hub, Amazon ECR, JFrog Container Registry и др. В результате с этими слервисами могут работать разные функции TeamCity. Например, если при очистке сервера будут удалены данные, связанные с устаревшей сборкой, можно настроить одновременное удаление Docker-образов, опубликованных в составе этой сборки.

Подробнее — в разделе документации, посвященном Docker Support.

Сценарий использования: как ускорить процессы разработки с помощью Docker и непрерывной интеграции

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

Используя Docker и TeamCity, вы обеспечите воспроизводимость сборок и избавитесь от проблем с управлением зависимостями и устранением ошибок совместимости. CI/CD-пайплайн для Java-проекта с Maven может выглядеть так:

TeamCity предлагает отчеты в реальном времени о сборке и тестировании: с момента коммита в систему контроля версий и до получения результатов. Таким образом, цикл обратной связи сокращается до минимума. TeamCity поддерживает проекты любого размера и сложности, помогает минимизировать количество ошибок, ускорить выпуск новых функций и повысить прозрачность процесса разработки.

Настройка CI/CD-пайплайна не требует обязательного написания кода и выполняется с помощью простого веб-интерфейса. При этом конфигурацию можно настроить и программным способом, используя Kotlin. Это позволит создать удобную в обслуживании воспроизводимую CI-конфигурацию, которая может сочетать различные языки программирования, операционные системы и облачные платформы.

Вопросы и ответы: CI/CD с помощью Docker и TeamCity

В каких операционных системах работает интеграция между TeamCity и Docker?

TeamCity может работать с Docker на любой платформе, поддерживающей среду выполнения Docker, в том числе Linux, Windows и macOS.

Может ли TeamCity создавать Docker-образы?

Да, TeamCity может не только запускать сборки в Docker-контейнерах, но и создавать Docker-образы, передавать их в реестры Docker и удалять их, опираясь на заданные критерии.

TeamCity — бесплатный продукт?

Да, на небольших проектах TeamCity On-Premises можно использовать бесплатно, при этом количество пользователей и время сборки не ограничены. Для TeamCity Cloud предусмотрен 14-дневный бесплатный пробный период. Обе версии предлагают полнофункциональную поддержку Docker.

TeamCity запускает сборки в Docker-контейнерах?

TeamCity может по вашему выбору запускать сборки как на локальной машине, так и в Docker-контейнерах.