Настройка TeamCity для приложения Kotlin Multiplatform
В этой статье объясняется, как настроить TeamCity для сборки, тестирования и развертывания приложений KMP. TeamCity поддерживает все основные поставщики VCS (GitHub, GitLab, Bitbucket, Azure DevOps, Perforce и другие), позволяет создавать гибридные рабочие процессы с высокой масштабируемостью, используя локальные и облачные агенты, а также включает мощные функции: многоузловые конфигурации для обеспечения высокой доступности, расширенное управление пользователями, интеграцию с системами отслеживания задач и ИИ-ассистента.
Попробуйте бесплатную пробную версию TeamCity: выберите Cloud с предварительно настроенными агентами, размещенными JetBrains, и основными инструментами сборки и SDK или TeamCity On-Premises для максимального контроля и бесплатной бессрочной лицензии Professional.
В основе этого руководства — пример JetCaster KMP.
Создание проекта
Любой рабочий процесс TeamCity начинается с проекта. Проекты содержат такие сущности, как конфигурации сборки и конвейеры, которые выполняют собственно процедуры CI/CD, хранят облачные профили для запуска облачных агентов, предоставляют дочерним объектам общие параметры и многое другое.
Нажмите кнопку с плюсом на боковой панели навигации, чтобы создать проект.
Укажите название проекта и при желании добавьте описание.
-
После нажатия Создать TeamCity предложит выбрать тип объекта, который будет выполнять задачи сборки: конфигурацию сборки или конвейер.
- Конфигурация сборки
-
Поддерживает весь набор функций TeamCity, позволяет хранить настройки конфигурации в виде кода Kotlin DSL и предлагает широкие возможности настройки. Однако для работы с ней может потребоваться больше опыта и ручной настройки.
Подробнее: Создание и редактирование конфигураций сборки.
- Конвейер
-
Предлагает интуитивно понятный интерфейс с визуальным редактором, редактируемыми конфигурациями YAML и удобным доступом к настройкам. Конвейеры предназначены для пользователей с небольшим опытом и более простых рабочих процессов. Конвейеры появились в TeamCity 2025.11; на данный момент в них отсутствуют некоторые функции, доступные в конфигурациях сборки.
Подробнее: Создание и редактирование конвейеров.
Для этого руководства выберите конвейеры: их проще настроить, и они поддерживают все функции, необходимые для сборки и тестирования нашего примера проекта.
Выберите Подключить новый репозиторий, а затем GitHub, чтобы создать постоянное подключение к GitHub, которое можно повторно использовать в будущих проектах, или Любой URL Git для временного подключения к определенному репозиторию (примеру приложения JetCaster или вашей личной копии репозитория).
-
Убедившись, что у TeamCity есть доступ к нужному репозиторию, система получает сведения о ветках и предлагает задать основные параметры работы конвейера.
Оставьте настройки по умолчанию, чтобы конвейер отслеживал все ветки репозитория, использовал
mainв качестве ветки по умолчанию и автоматически запускался при каждом коммите изменений в репозитории.
Добавление заданий в конвейер
Когда конвейер будет готов, TeamCity откроет страницу его настроек. Переключатель в левом верхнем углу позволяет перейти между визуальным редактором и редактором кода.

Конвейеры TeamCity состоят из заданий — наборов последовательно выполняемых шагов сборки. Шаг сборки — это наименьшая единица процедуры TeamCity, которая включает определенный набор действий.
В интерфейсе TeamCity нажмите плитку задания, чтобы изменить его настройки, или нажмите затемненную область под заданиями, чтобы изменить глобальные настройки конвейера.
Общие настройки конвейера
Для этого руководства не нужно настраивать глобальные параметры конвейера. Подробнее о параметрах, которые влияют на все задания в конвейере, см. в этой статье. К таким параметрам относятся:
Автозапуск конвейеров — позволяет настроить автоматический запуск конвейера при каждом коммите изменений в удаленный репозиторий (включено по умолчанию), при открытии запроса на слияние для репозитория или по заданному расписанию.
Репозиторий — позволяет извлекать и обрабатывать несколько репозиториев из разных хостингов VCS.
Интеграции — позволяет подключать внешние реестры NPM и Docker. Обратите внимание: если вы планируете выполнять шаги сборки в общедоступных образах Docker Hub, настраивать соответствующую интеграцию не нужно, если только конвейер не запускается настолько часто, что превышает ограничения Docker Hub на анонимную загрузку образов.
Настройки агентов
Задачи сборки обрабатываются агентами сборки, установленными на физических или облачных машинах. На этих машинах должны быть установлены все инструменты, необходимые для выполнения заданных задач сборки. Например, для задания 2 в этом конвейере требуется Android SDK, а в задании 3 используется Xcode для сборки версии приложения для iOS.
В TeamCity Cloud используются агенты, размещенные JetBrains и оснащенные широким набором инструментов сборки. Для этого руководства подключать дополнительные агенты не нужно.
Если вы используете TeamCity On-Premises, убедитесь, что каждое задание может выполняться как минимум на одном агенте. Подробнее см. в статье Установка и запуск агентов TeamCity.
В этом руководстве в заданиях указаны требования к агентам, чтобы гарантировать их назначение только агентам с необходимыми установленными инструментами.
Запуск общих тестов
Переключитесь на редактор конвейера YAML и вставьте следующую разметку, чтобы настроить первое задание:
jobs:
Job1:
name: Run tests
steps:
- type: gradle
use-gradle-wrapper: true
name: Gradle test
jdk-home: '%env.JDK_17_0%'
tasks: jvmTest
files-publication:
- path: '**/build/reports/tests/**/*'
share-with-jobs: false
publish-artifact: true
allow-reuse: false
Это задание запускает задачу Gradle jvmTest с использованием Java 17. Оно собирает все файлы, пути которых соответствуют .../build/reports/tests/..., помещает их в папку test-reports и публикует эту папку как артефакт.
Также можно включить параметр задания Оптимизации | Параллельное тестирование, чтобы разделить набор тестов на более мелкие группы и обрабатывать каждую группу на отдельном агенте сборки. Это может значительно сократить общее время выполнения, но потребует больше ресурсов. Чтобы включить параллельное тестирование, измените YAML конвейера, добавив параметр parallelism, как показано ниже:
...
allow-reuse: false
parallelism: 3
Параметр оптимизации Разрешить повторное использование определяет, следует ли TeamCity пропускать повторный запуск задач, если конфигурация конвейера или исходный код не изменились.
Дополнительные сведения см. в статьях Настройки задания и Шаг сборки Gradle.
Сборка отладочного пакета Android
Измените YAML конвейера следующим образом:
jobs:
Job1:
name: Run tests
...
Job2:
name: Build Android
steps:
- type: gradle
jdk-home: '%env.JDK_17_0%'
tasks: ':mobile:assembleDebug'
use-gradle-wrapper: true
files-publication:
- path: mobile/build/outputs/apk/debug/*.apk
share-with-jobs: false
publish-artifact: true
runs-on:
self-hosted:
- requirement: exists
name: Android home
parameter: env.ANDROID_HOME
dependencies:
- Job1
Блок
requirementгарантирует, что это задание будет назначено только агентам с установленным Android SDK.Раздел
dependenciesгарантирует, что это задание начнется только после успешного завершенияJob1.
Сборка приложения для симулятора iOS
На последнем шаге добавьте в YAML конвейера следующую разметку:
jobs:
Job1:
...
Job2:
...
Job3:
name: Build iOS
steps:
- type: script
script-content: |-
xcodebuild build \
-project JetcasterMigration/JetcasterMigration.xcodeproj \
-configuration Debug \
-scheme JetcasterMigration \
-sdk iphonesimulator \
-derivedDataPath ./build \
-verbose
files-publication:
- path: build/Build/Products/Debug-iphonesimulator/**/*
share-with-jobs: false
publish-artifact: true
dependencies:
- Job1
В отличие от первых двух заданий, Сборка iOS использует универсальный шаг сборки командной строки, который позволяет выполнять команды и работать с любыми инструментами, установленными на машине агента.
Раздел dependencies указывает зависимость от Job1. Это означает, что задания Сборка Android и Сборка iOS могут выполняться параллельно, но начнутся только после завершения процедуры тестирования из Job1.
Запуск конвейера
Нажмите Сохранить и запустить в правом верхнем углу, чтобы запустить рабочий процесс. После завершения задания опубликованные им артефакты появятся на вкладке Артефакты рядом с журналом сборки.

В Job1 также появится вкладка Тесты, на которой можно просмотреть результаты тестирования.

Что дальше
Вы можете продолжить изменять этот пример, чтобы получить еще больше преимуществ:
-
Добавление конвейера с подключением VCS
При добавлении нового конвейера в проект выберите GitHub вместо Любой URL Git. Такой подход позволяет не только пропустить настройку доступа к VCS для будущих проектов на GitHub, но и использовать дополнительные функции конвейеров:
TeamCity может публиковать статусы запусков (успешный, неудачный или выполняющийся) непосредственно в GitHub.
В параметрах триггера При появлении новых изменений и разделе Репозиторий появится переключатель Запросы на слияние, который позволяет отслеживать и собирать изменения, еще не зафиксированные в стабильной ветке.
-
Изучение расширенных конфигураций сборки
Перейдите от конвейеров к конфигурациям сборки, чтобы получить доступ к расширенным возможностям:
Используйте цепочки сборок и составные конфигурации, чтобы запускать отдельные части рабочего процесса. Например, запускайте Тестирование → Сборка iOS, не запуская Сборка Android, или запускайте только конфигурацию тестирования.
Используйте весь набор шагов сборки, разработанных JetBrains, рецепты сообщества и отдельно устанавливаемые шаги, например выпуски GitHub.
Разверните агенты в кластере Kubernetes или используйте Kubernetes как внешний исполнитель.
Настройте интеграции с системами отслеживания задач и хранилищами секретов.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/configure-teamcity-for-kmp.html

