TeamCity 2020.1: условия выполнения билд-шагов, запуск билд-агентов в Kubernetes, новые интеграции и нотификации

Привет, Хабр! На прошлой неделе мы выпустили TeamCity 2020.1 — новую версию CI/CD-сервера от JetBrains. В этом посте я хочу рассказать, что в ней появилось интересного.

4u4jv8en--ifc3yzhrea1pwuzrs.png

Условия выполнения билд-шагов


Запрос Execute a build step based on a condition был создан в нашем баг-трекере 9 лет назад, и по количеству голосов он много лет держал однозначное лидерство. И вот, наконец, мы реализовали эту функцию! Теперь вы можете задавать условия запуска отдельных шагов сборки.

Выглядит это примерно так:

9osqt42kx5kmduophtylirvwwbu.gif

TeamCity 2020.1 позволяет делать отдельные билд-шаги опциональными, и у этого может быть масса самых разных применений. Например, можно выполнять часть тестов только на выбранном агенте или только под заданной OS. Можно деплоить изменения на различные сервера, в зависимости от бранча. Можно выполнять различные command-line скрипты на различных платформах. И так далее.

Почему мы не сделали этого раньше? Потому что любые CI/CD пайплайны всегда можно было создать и без этого. TeamCity построен вокруг идеи, что каждая билд-конфигурация должна отвечать за одну конкретную задачу, без сложной логики внутри. Задеплоить на staging-сервер — один билд, задеплоить на production-сервер — другой. Хотите создать много однообразных билдов? Kotlin DSL и шаблоны вам в помощь.

pixjm-dyaonrvcm1je6wo31dx9o.png

Но жизнь показала, что многие пользователи ожидают от продукта другого поведения, и вместо создания цепочек из билдов хотят задавать условия выполнения отдельных шагов внутри билдов. Их просьбы, наконец, растопили наши сердца — надеемся, что теперь TeamCity станет для них понятнее и удобнее. Мы же со своей стороны будем внимательно наблюдать, как используется эта фича.

Пользуясь случаем, напомню, что все продукты JetBrains развиваются совершенно прозрачно, и для каждого из них доступен публичный баг-трекер. В нашем YouTrack вы всегда можете предложить что-то новое, зарепортить баг или добавить голос какому-то запросу.

Запуск билд-агентов в кластере Kubernetes


Поддержка запуска билд-агентов в Kubernetes появилась в TeamCity ещё в 2017 году в виде отдельного плагина. В версии 2020.1 мы доработали этот плагин, исправили ряд багов и включили в основной дистрибутив, сделав доступным из коробки. Идея осталась всё та же: билд-агенты запускаются по необходимости, выполняют свою в работу, а затем удаляются после завершения сборки.

vhbzcydgg-6voyowtwpnbxb-nsc.png

Мультисерверное масштабирование


Уже два года мы активно развиваем возможность совместной работы нескольких установок TeamCity в режиме кластера. В версии 2020.1 расширился список обязанностей (responsibilities), которые могут быть назначены вторичным серверам, а также появилась возможность выполнять ряд действий пользовательского уровня в UI.

Начнём с новых обязанностей. Многие из наших клиентов имеют огромные инсталляции TeamCity с сотнями и тысячами триггеров, которые срабатывают при коммитах, появлении новых артефактов, по таймеру и т. д. Теперь к этому процессу можно подключить вторичный сервер и разгрузить основной.

_k2b99pzbejjhde3uaiypidinjk.png

Внутри JetBrains практически все продукты собираются при помощи TeamCity. На сегодняшний день у нас более 1100 билд-агентов, которые управляются двумя серверами. Раньше встречались ситуации, когда время обработки каких-то триггеров было больше, чем интервал между срабатываниями этих триггеров. Например, кому-то нужно было запускать сборку каждую минуту, но сервер не мог этого сделать, потому что соответствующий триггер обрабатывался раз в две минуты. После переключения обработки триггеров на вторичный сервер, эта проблема ушла.

Кроме обработки триггеров мы расширили интерфейс вторичного сервера: теперь он позволяет редактировать профиль пользователя, менять вид проектов и конфигураций и управлять билд-агентами. Это позволяет продолжать работать с TeamCity во время даунтайма основного сервера.

Возможность загрузить готовый дистрибутив билд-агента


При подключении к серверу TeamCity билд-агенты первым делом проверяют собственную версию и актуальность установленных плагинов. Если находятся несовпадения, то запускается обновление, которое может занять значительное время (до нескольких минут). Чтобы облегчить жизнь пользователям, работающим с облачными билд-агентами, в версии 2020.1 добавлена возможность скачать готовый дистрибутив билд-агента, который не потребует обновления при подключении к серверу.

История инвестигаций


Для исправления падающих билдов TeamCity позволяет назначать инвестигации (investigations), чтобы кто-нибудь из команды изучил причину падения. Инвестигации позволяют понять, занимается ли кто-то сломанным билдом и каков текущий статус проблемы. В JetBrains этой функцией пользуются все команды без исключения, это неотъемлемая часть нашего процесса разработки.

Раньше мы часто сталкивались со следующей ситуацией. Падает сборка, ты начинаешь искать проблему и понимаешь, что где-то ты её уже видел. Начинаешь вспоминать, кто проводил инвестигацию в прошлый раз, в чём она заключалась и чем закончилась. Но поскольку такой информации нигде не хранится, приходится выяснять в чатиках.

В TeamCity 2020.1 мы добавили возможность посмотреть историю инвестигаций: кто её создал и каким образом она пришла к текущему состоянию. Это оказалось настолько полезно, что наш коллега lany отозвался об этой функции так:

“Whoever created the investigation history table, thank you very much! It's the most useful addition to TeamCity during the last year!”

Надеемся, что и вам она придётся по душе!

Уведомления на уровне проектов


Ранее TeamCity поддерживал только персональные уведомления: каждый пользователь мог зайти в настройки и выбрать, какие сообщения он хочет получать. В новой версии администраторы проектов могут настраивать уведомления сразу для всей команды. Делается это на уровне билд-конфигурации, что даёт возможность наследовать настройки подпроектами, а также редактировать, переиспользовать их и делиться ими с помощью Kotlin DSL.

uiu5avtf2b0u3uiryc918hwo_xs.png

На базе нового движка уведомлений мы разработали новую функциональность, которая позволяет получать уведомления о статусе сборок в Slack.

Новые интеграции


Jira Software Cloud


TeamCity умеет интегрироваться с Jira уже не один год: при упоминании задач в сообщениях коммита к ним автоматически добавляются ссылки на соответствующие задачи в Jira. В новой версии мы расширили интеграцию и начали отправлять информацию о состоянии билдов в Jira Software Cloud. Теперь для каждой задачи в Jira можно увидеть связанные с ней билды, когда они были собраны, и куда они были задеплоены.

u1ojdybdnfrkvnulmyrqd2yzdvm.png

Azure DevOps


Мы добавили поддержку пулл-реквестов Azure DevOps, расширив список VCS-хостингов, для которых работает функция Pull Requests. Теперь TeamCity позволяет автоматически собирать пулл-реквесты Azure DevOps — аналогично тому, как это работает с GitHub и GitLab.

1obaa82-wjmgupocdq_2g_smqpk.png

Новый интерфейс “Sakura”


Год назад мы выпустили новый экспериментальный интерфейс под кодовым названием “Sakura”, и за это время он отлично себя зарекомендовал. Он классный: выглядит свежо, работает быстро и построен на современных технологиях, что позволяет нам добавлять новые функции без тормозов.

Пока что Sakura ещё не поддерживает все-все сценарии, которые доступны в классическом интерфейсе. Однако мы вовсю движемся к этому. В версии 2020.1 мы обновили страницы Agents и Projects, а также добавили возможность кастомизировать боковую панель.

gm1lnxfsxxrfi8e39pmb-rozqsu.gif

Это не все изменения новой версии! Полный список изменений можно прочитать в документации.

Дистрибутивы TeamCity 2020.1 можно скачать с нашего сайта. Также доступен Docker-образ TeamCity на Docker Hub.

Замечания и предложения по новой версии оставляйте в нашем баг-трекере.

Напомню, что у нас есть бесплатная версия TeamCity Professional, которая отлично подойдёт большинству разработчиков. В ней всего два ограничения: она позволяет создавать не более 100 билд-конфигураций и запускать не более 3 параллельных билдов. В остальном она не отличается от TeamCity Enterprise.

Удачных сборок!

© Habrahabr.ru