Налаштування CI/CD пайплайну на TeamCity: Kotlin DSL, шаблони та деплой

Ручні деплої та довгі збірки гальмують вихід релізів і забирають час розробників. Ми налаштовуємо CI/CD пайплайни на TeamCity з використанням Kotlin DSL та шаблонів, автоматизуючи весь процес від збірки до деплою. Наша команда реалізує проєкт під ключ — від аудиту та встановлення сервера до документації та подальшої підтримки, забезпечуючи стабільну та швидку доставку змін.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування CI/CD пайплайну на TeamCity: Kotlin DSL, шаблони та деплой
Середній
~2-3 дні
Часті запитання

Налаштування CI/CD пайплайну на TeamCity: покроковий гід

Уявіть: інтернет-магазин на Node.js з трьома середовищами (dev, staging, production). Кожна збірка — з нуля, залежності тягнуться з npm без кешу, тести прогоняються послідовно. На деплой йшло 40 хвилин, а відкат — ручне перезаливання архіву по SSH. Після аудиту ми налаштували TeamCity: паралельні кроки, кешування node_modules, автоматичні тести в контейнерах. Час збірки впав до 8 хвилин — у 5 разів швидше. Розробники перестали чекати, а релізи стали виходити щодня. Така економія часу напряму знижує TCO і прискорює вихід фіч в прод. Наша команда з 10-річним досвідом і понад 50 успішних інтеграцій налаштує CI/CD під ключ: від встановлення сервера до документації.

Типові технічні складності

N+1 запит в тестах — TeamCity збирає звіти про покриття і знаходить вузькі місця на етапі CI. Брудні середовища — кожен білд на чистому Docker-агенті, конфлікти виключені. Довгі збірки — паралельні кроки та кешування залежностей (npm cache, Maven local) скорочують час до 70%. Для типового Node.js проекту збірка з кешем займає 2-3 хвилини замість 10. Середній час відновлення після збою скорочується до 15 хвилин завдяки автоматичним відкатам.

Налаштування пайплайну: Kotlin DSL та кроки

Використовуємо Kotlin DSL — конфігурація як код, версіонується в Git і проходить code review. TeamCity підтримує складні пайплайни з паралельними кроками. Нижче — типовий пайплайн для Node.js додатку:

// .teamcity/settings.kts
import jetbrains.buildServer.configs.kotlin.*
import jetbrains.buildServer.configs.kotlin.buildSteps.*
import jetbrains.buildServer.configs.kotlin.triggers.*

version = "latest"

project {
    buildType(Build)
    buildType(Test)
    buildType(Deploy)
    buildTypesOrder = arrayListOf(Build, Test, Deploy)
}

object Build : BuildType({
    name = "Build"
    vcs {
        root(DslContext.settingsRoot)
    }
    steps {
        nodeJS {
            shellScript = "npm ci && npm run build"
        }
    }
    artifactRules = "dist/** => dist.zip"
})

object Test : BuildType({
    name = "Test"
    dependencies {
        snapshot(Build) {}
    }
    steps {
        script {
            scriptContent = """
                npm ci
                npm test -- --coverage --ci
            """.trimIndent()
        }
    }
    failureConditions {
        testFailure = true
        errorMessage = true
    }
})

object Deploy : BuildType({
    name = "Deploy to Production"
    type = Type.DEPLOYMENT
    dependencies {
        snapshot(Test) {}
        artifacts(Build) {
            artifactRules = "dist.zip => ."
        }
    }
    params {
        param("deploy.env", "production")
    }
    steps {
        script {
            scriptContent = """
                unzip dist.zip -d /var/www/app/
                sudo systemctl reload nginx
            """.trimIndent()
        }
    }
    triggers {
        vcs {
            branchFilter = "+:refs/heads/main"
        }
    }
})

Деплой через SSH

Для PHP-проектів (Laravel, Symfony) додали SSH-крок:

sshExec {
    commands = """
        cd /var/www/app
        git pull origin main
        composer install --no-dev --optimize-autoloader
        php artisan migrate --force
        php artisan config:cache
        php artisan route:cache
        php artisan view:cache
        sudo systemctl reload php8.3-fpm
    """.trimIndent()
    targetUrl = "deploy-server.example.com"
    authMethod = uploadedKey {
        username = "deploy"
        key = "deploy_key"
    }
}

Docker-збірка в TeamCity

Контейнеризація уніфікує середовище і позбавляє від помилок «на моїй машині працює».

steps {
  dockerCommand {
    commandType = build {
      source = file {
        path = "Dockerfile"
      }
      namesAndTags = "registry.example.com/myapp:%build.counter%"
      commandArgs = "--no-cache"
    }
  }
  dockerCommand {
    commandType = push {
      namesAndTags = "registry.example.com/myapp:%build.counter%"
    }
  }
}

Параметри та шаблони

Багатосередовищні проекти (staging, production) налаштовуємо через шаблони. Один шаблон — три середовища, мінімум коду.

template("DeployTemplate") {
    params {
        param("env.name", "")
        param("env.url", "")
        param("ssh.host", "")
    }
    steps {
        script {
            scriptContent = "deploy.sh %env.name% %env.url%"
        }
    }
}

object DeployStaging : BuildType({
    templates(DeployTemplate)
    params {
        param("env.name", "staging")
        param("env.url", "https://staging.example.com")
        param("ssh.host", "staging.server.com")
    }
})

Чому TeamCity виграє у Jenkins?

TeamCity швидший при паралельних збірках — у два рази, завдяки вбудованому артефакто-сховищу та розумному планувальнику. Kotlin DSL дає типізацію та автодоповнення в IDE, тоді як Jenkins Pipeline — Groovy з динамічною типізацією, що часто веде до помилок рантайму. Нативні шаблони та параметри середовищ TeamCity спрощують масштабування на десятки проектів. Для наочності:

Критерій TeamCity Jenkins
Конфігурація Kotlin DSL (статична типізація) Groovy (динамічна)
Паралельні збірки Вбудований планувальник, швидше в 2 рази Потребує налаштування
Шаблони середовищ Нативні параметри та шаблони Через бібліотеки
Артефакти Вбудоване сховище Плагін

Замовте налаштування TeamCity — отримайте готовий пайплайн з документацією за 5-7 днів. Економія від $5000 на місяць на операціях деплою.

Розгортання деплою на кілька середовищ

Використовуємо шаблони з параметрами: env.name, env.url, ssh.host. Кожне середовище — окремий build type з прив'язкою до шаблону. VCS triggers на main запускають автоматичний деплой на staging; production — тільки вручну через UI. Це виключає випадковий деплой на прод.

Типові помилки при налаштуванні CI/CD
  • Ігнорування artifactRules — артефакти не потрапляють в наступний білд, деплой ламається
  • Відсутність ізоляції агентів — бібліотеки конфліктують, тести падають непередбачувано
  • Хардкод credentials — ключі в коді, витік безпеки. Використовуємо параметри TeamCity та сховище паролів
  • Занадто довгі пайплайни — всі кроки в одному білді, немає паралелізації. Ділимо на Build → Test → Deploy
  • Немає сповіщень — команда дізнається про падіння збірки через кілька годин

Які проекти потребують автоматизації CI/CD?

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

Що входить в роботу

  • Аудит поточного процесу збірки та деплою (1 день)
  • Встановлення сервера та агентів TeamCity (Docker або bare metal) — 1 день
  • Налаштування VCS triggers, збірки, тестів та артефактів
  • Шаблони для середовищ (dev/staging/production)
  • Сповіщення про статус збірок (Slack, email)
  • Тестування пайплайну та виправлення помилок
  • Документація та навчання вашої команди
  • Гарантія працездатності протягом місяця після здачі

Терміни та вартість

Вартість розраховується індивідуально після аналізу проекту. Орієнтовні терміни:

Компонент Час
Встановлення та базова конфігурація 1 день
Kotlin DSL та шаблони 1–2 дні
Інтеграція з VCS та тестами 1 день
Деплой на середовища 1–2 дні
Сповіщення та документація 1 день

Отримайте консультацію з налаштування TeamCity під ваш проект. Зв'яжіться з нами — ми допоможемо автоматизувати деплой без головного болю. Також ви можете запросити чек-лист з налаштування CI/CD.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060