Я работал со множеством инструментов CI/CD за последние несколько лет. Однако TeamCity был для меня чем-то новым. Установив и попробовав его, я понял, почему это отличный выбор для разработчиков, которые ищут простой и удобный способ настройки CI/CD, особенно для сборки и тестирования.
Что такое TeamCity?
TeamCity — это решение от JetBrains, компании, хорошо знакомой многим .NET-разработчикам. Это CI/CD-сервер на Java, поддерживающий множество языков программирования и фреймворков. Его главное преимущество — простота настройки. Также он предлагает множество плагинов и функций «из коробки».
Я пробовал устанавливать его на Windows Server и в Docker-контейнере. В обоих случаях процесс был очень простым. Установка на Windows потребовала только действий «далее, далее, готово», а запуск контейнера был таким же лёгким, как и с любым другим Docker-образом.
Бесплатная версия
Для небольших проектов или домашних лабораторий доступна бесплатная версия TeamCity Professional. Она позволяет использовать до 100 конфигураций сборок и 3 агентов. По сути, это все функции корпоративной версии с небольшими ограничениями.
Какие возможности он предлагает?
Вкратце, TeamCity можно использовать для:
- Сборки кода
- Запуска тестов
- Создания артефактов
- Развёртывания в разных окружениях
Он не привязан к конкретному языку или процессу: отлично работает с .NET, Java, Node.js, Python, Docker, Kubernetes и другими технологиями. Однако важно помнить, что TeamCity — не система контроля версий. Вам понадобится отдельный репозиторий для хранения кода, а TeamCity будет заниматься сборкой.
Основные особенности:
1. Интеллектуальные сборки. TeamCity автоматически определяет изменения в репозитории и запускает нужные шаги сборки. Поддерживает инкрементные сборки, кэширование на основе зависимостей и историю тестов, что сокращает лишнюю нагрузку.
2. Интеграция с популярными IDE. Благодаря разработке JetBrains, TeamCity хорошо работает с IntelliJ IDEA, Rider и Visual Studio, позволяя взаимодействовать с CI/CD прямо из среды разработки.
3. Использование Kotlin DSL вместо YAML. В отличие от других инструментов, TeamCity использует Kotlin-based DSL (предметно-ориентированный язык) для конфигураций.
4. Поддержка Docker и Kubernetes. TeamCity работает с Docker-агентами, позволяя собирать и тестировать контейнеры. Кроме того, можно динамически запускать агенты в Kubernetes в зависимости от нагрузки.
5. Параллельные сборки. В отличие от других решений, где параллельные сборки часто доступны только в корпоративных версиях, TeamCity поддерживает их «из коробки».
6. Плагины. JetBrains предлагает множество плагинов для интеграции с GitHub, GitLab, Bitbucket, Azure DevOps, Slack, Jira, Octopus Deploy и другими инструментами.
Kotlin DSL vs YAML
Для сравнения рассмотрим синтаксис Kotlin DSL в TeamCity и YAML в других CI/CD-системах. Некоторые разработчики не любят YAML, и для них Kotlin DSL может стать более удобной альтернативой.
Пример Kotlin DSL в TeamCity:
kotlin
version = "2023.11"
project {
buildType(BuildAndTest)
}
object BuildAndTest : BuildType({
name = "Build and Test"
vcs {
root(DslContext.settingsRoot)
}
triggers {
vcs {
branchFilter = "+:main"
}
}
steps {
gradle {
name = "Build"
tasks = "build"
}
gradle {
name = "Test"
tasks = "test"
}
}
artifactRules = "build/libs/*.jar => artifacts"
})
Аналогичная конфигурация в YAML:
yaml
stages:
- build
- test
- publish
build:
stage: build
script:
- ./gradlew build
artifacts:
paths:- build/libs/*.jar
expire_in: 1 week
only:
- build/libs/*.jar
- main
test:
stage: test
script:
- ./gradlew test
only: - main
С какими репозиториями совместим TeamCity?
TeamCity не является системой контроля версий, но поддерживает интеграцию с большинством популярных репозиториев, включая:
- Bitbucket (Cloud или Server)
- GitHub
- GitLab
- Azure Repos
- Perforce, Mercurial, Subversion и другие
Установка TeamCity
Самый удобный способ установки TeamCity — использование Docker. Официальная команда для запуска контейнера:
bash
docker run —name teamcity-server-instance
-v <путь-к-данным>:/data/teamcity_server/datadir
-v <путь-к-логам>:/opt/teamcity/logs
-p <порт>:8111
jetbrains/teamcity-server
После запуска контейнера откроется мастер настройки, который проведёт через следующие шаги:
- Выбор способа установки (новая установка или восстановление из резервной копии).
- Настройка базы данных. По умолчанию используется встроенная БД HSQLDB.
- Создание учётной записи администратора.
- Завершение настройки и вход в интерфейс TeamCity.
После этого можно приступить к созданию проекта и настройке сборок.
Добавление шагов сборки
Если TeamCity не определил шаги сборки автоматически, их можно добавить вручную. Например, можно настроить сборку Docker-контейнера из Dockerfile в репозитории.
Настройка агентов
Для выполнения сборок необходимо добавить агенты. TeamCity поддерживает «проталкивание» агентов на удалённые машины. Однако процесс требует ручной установки Java (включая OpenJDK) на целевой системе.
После добавления агента можно запускать сборки. TeamCity предоставляет детальную информацию о выполнении задач, включая возможные предупреждения (например, о старой версии Java).
Заключение
TeamCity — мощное и удобное решение для CI/CD. Оно предлагает множество функций, которых нет в других инструментах, включая поддержку Kotlin DSL (что особенно удобно для тех, кто не любит YAML). Важно помнить, что TeamCity не заменяет систему контроля версий, а дополняет её, фокусируясь на сборке и развёртывании. Его можно использовать совместно с другими инструментами, такими как Octopus Deploy, но встроенные возможности тоже впечатляют. В будущем я планирую изучить его применение для деплоя, так что ждите новых публикаций на эту тему.