Что такое TeamCity?
TeamCity — это мощный сервер непрерывной интеграции от JetBrains, который обеспечивает автоматизацию сборки, тестирования и развертывания приложений. Известен своим удобным веб-интерфейсом и глубокой интеграцией с IDE от JetBrains.
Основные возможности TeamCity
- Intuitive UI — удобный и информативный веб-интерфейс
- IDE Integration — глубокая интеграция с IntelliJ IDEA, PyCharm и др.
- Build chains — сложные цепочки зависимых сборок
- Parallel builds — параллельное выполнение на множественных агентах
- VCS Integration — поддержка всех популярных систем контроля версий
- Test reporting — детальная отчетность по тестам
- Artifact management — управление артефактами сборки
Установка TeamCity
1# Установка через Docker
2docker run -d --name teamcity-server \
3 -v teamcity_data:/data/teamcity_server/datadir \
4 -v teamcity_logs:/opt/teamcity/logs \
5 -p 8111:8111 \
6 jetbrains/teamcity-server
7
8# Установка агента
9docker run -d --name teamcity-agent \
10 -e SERVER_URL="http://teamcity-server:8111" \
11 -v teamcity_agent:/data/teamcity_agent/conf \
12 jetbrains/teamcity-agent
13
14# Установка на Ubuntu/Debian
15wget https://download.jetbrains.com/teamcity/TeamCity-2023.11.tar.gz
16tar -xzf TeamCity-2023.11.tar.gz
17cd TeamCity/bin
18./runAll.sh start
Настройка Build Configuration
1<!-- Build step для Python проекта -->
2<build-type>
3 <name>Python Build</name>
4 <description>Build and test Python application</description>
5
6 <vcs-settings>
7 <vcs-entry-ref root-id="MyRepo_HttpsGithubComUserRepoGit" />
8 </vcs-settings>
9
10 <build-runners>
11 <!-- Установка зависимостей -->
12 <runner name="Install Dependencies" type="simpleRunner">
13 <parameters>
14 <param name="script.content">
15 pip install -r requirements.txt
16 # poetry install (если используется Poetry)
17 </param>
18 <param name="teamcity.step.mode">default</param>
19 <param name="use.custom.script">true</param>
20 </parameters>
21 </runner>
22
23 <!-- Запуск тестов -->
24 <runner name="Run Tests" type="simpleRunner">
25 <parameters>
26 <param name="script.content">
27 pytest tests/ --junitxml=test-results.xml --cov=app --cov-report=xml
28 </param>
29 <param name="teamcity.step.mode">default</param>
30 <param name="use.custom.script">true</param>
31 </parameters>
32 </runner>
33
34 <!-- Docker сборка -->
35 <runner name="Docker Build" type="docker-build">
36 <parameters>
37 <param name="dockerfile.path">Dockerfile</param>
38 <param name="docker.image.namesAndTags">myapp:%build.number%</param>
39 <param name="docker.push.enabled">true</param>
40 </parameters>
41 </runner>
42 </build-runners>
43
44 <build-triggers>
45 <trigger type="vcsTrigger">
46 <parameters>
47 <param name="quietPeriodMode">DO_NOT_USE</param>
48 </parameters>
49 </trigger>
50 </build-triggers>
51</build-type>
Meta-Runners для переиспользования
1<!-- Python Test Meta-Runner -->
2<meta-runner name="Python Tests">
3 <description>Run Python tests with coverage</description>
4 <settings>
5 <parameters>
6 <param name="python.version" spec="text label='Python Version' default='3.9'" />
7 <param name="test.path" spec="text label='Test Path' default='tests/'" />
8 </parameters>
9 <build-runners>
10 <runner type="simpleRunner">
11 <parameters>
12 <param name="script.content">
13 python%python.version% -m pytest %test.path% --junitxml=test-results.xml
14 </param>
15 </parameters>
16 </runner>
17 </build-runners>
18 </settings>
19</meta-runner>
Build Chains и Dependencies
- Snapshot dependencies — использование артефактов из других сборок
- Artifact dependencies — зависимости от файлов других сборок
- Finish build trigger — запуск после завершения других сборок
- Build chains — автоматическое построение цепочек зависимостей
Интеграция с IDE
1# Плагин для IntelliJ IDEA
2# Автоматически показывает статус сборок
3# Позволяет запускать персональные сборки
4# Интеграция с системой контроля версий
5
6# Remote Run - запуск сборки до коммита
7# Pre-tested commit - коммит только после успешной сборки
8# Personal builds - персональные сборки разработчика
Когда использовать TeamCity
- Команда использует IDE от JetBrains
- Нужен удобный веб-интерфейс для мониторинга
- Сложные build chains и зависимости
- Важна детальная отчетность и аналитика
- On-premise развертывания с enterprise требованиями
- Необходимость в персональных сборках
Преимущества TeamCity
- User Experience — один из лучших UI среди CI серверов
- IDE Integration — глубокая интеграция с JetBrains IDE
- Build Chains — мощные возможности для сложных пайплайнов
- Test Intelligence — умная обработка и отображение тестов
- Enterprise Features — корпоративные возможности из коробки
- Performance — высокая производительность и надежность
Недостатки TeamCity
- Коммерческая лицензия для больших команд
- Сложность настройки для простых случаев
- Требует больше ресурсов чем некоторые альтернативы
- Менее популярен чем Jenkins или GitHub Actions
- XML конфигурация может быть сложной
Альтернативы TeamCity
- Jenkins — open source с большой экосистемой
- GitHub Actions — для проектов на GitHub
- GitLab CI/CD — интегрированное решение
- Azure Pipelines — от Microsoft
- Bamboo — от Atlassian
Best Practices
- Используй build templates для стандартизации
- Настрой proper cleanup policies для дискового пространства
- Используй build chains для сложных зависимостей
- Настрой уведомления для команды
- Мониторь производительность агентов
- Регулярно обновляй TeamCity и агентов
FAQ
Подходит ли TeamCity для продакшена?
Да, TeamCity широко используется в production средах и зарекомендовал себя как надежное решение. Используется многими крупными компаниями.
Какие требования к инфраструктуре?
Минимально: 4GB RAM для сервера, 2GB для агента. Для production рекомендуется больше ресурсов в зависимости от нагрузки.
Сколько стоит TeamCity?
Бесплатно для до 3 агентов и 100 build configurations. Коммерческие лицензии начинаются от $1999/год за сервер.