Что такое 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/год за сервер.