Pull to refresh

Comments 26

А потом в сложной конфигурации кто-то куда-то нажал и всё пропало.

Это как раз не проблема — настраиваем хранение настроек в гите и можем откатиться. Есть, правда, вопросы к тому, как хранятся пароли и ключи в таком случае. Другое дело, что руками эти файлы редактировать "наугад" так себе затея, а мануала хотя бы подобного этому я не нашёл. Остаётся клацать в GUI сохраняться и смотреть диффы. Пробовать что-то сделать и наблюдать как даже не загрузка конфигов, а их компиляция падает.

Если вы храните настройки в коде в формате Kotlin (а это рекомендованный подход, если вы хотите их редактировать и создавать, а не просто хранить), то есть несколько способов его «изучить»:
1. На каждой странице настроек конфигураций есть кнопка View in DSL — она позволяет увидеть, как будут выглядеть ваши текущие настройки в Kotlin формате
image
2. На уровне проекта можно скачать полное описание проекта и его конфигураций в Kotlin, если зайти в настройки -> Actions -> Download settings in Kotlin format
image
3. Ну а из почитать есть серия постов про Kotlin DSL, документация и вот этот доклад про то, как начать использовать Kotlin DSL в своих проектах.

Да, спасибо. Я самого начала установил хранение в репе. Не понял только можно ли как-то сделать, что была общая репа на root project, а настройки подпроектов в их репозитори...


А вот View DSL только вчера заметил, хотя уже несколько месяцев ковыряюсь

А это проблема? Всё, что можно настроить мышкой, можно же настроить и кодом. Интерфейс нужен для тех, кому по какой-то причине не хочется разбираться, как настраивать конфигурацию через код.

Вот никак не могу придумать как реализовать с этим набором несколько простых сценария:
1.билд любой ветки и деплой её на дев-сервер с обязательным запросом ветки, без дефолта
2.на коммиты в develop билд её и деплой туда же автоматически (это сделал кое-как, правда билд докера не кэшируется)
Крайне желательно чтобы было видно какая ветка задеплоена без копания в логах
3.1 На коммит в мастер билд и деплой на стейджинг сервер автомвтически
3.2 Запускаются тесты на стейджинге, формируются отчёты, QA получает уведомление, в идеале с ссылкой на апрув
3.3 пайплайн ставится на паузу
3.3 QA жмёт апрув, билд деплоится на прод


  1. Аналогично 3.1+3.2 для лобой (пускай с шаблоном hotfix-*)

При этом какое-то переиспользование хорошо бы (про шаблоны знаю, но ещё не разобрался), в частности совсем не хочется создавать три конфигурации для дева, стейджа и прода, которые отличаются только десятком-другим параметров, но создавать 30-60 параметров типа prod-db-host, dev-db-host… не хочется. Типа хэшмапы есть что-то, чтоб в параметрах задать конфиги для каждого енва в одном месте и дёргать их из разных конфигураций и шагов?

1.билд любой ветки и деплой её на дев-сервер с обязательным запросом ветки, без дефолта
создание отдельного билда(для нужной выбранной ветки) Вам не подходит? Можно даже скопировать конфиг дефолтного билда, а потом просто внести правки в меню «Version Control Settings».
п.2 описан сумбурно. Если правильно понял, то тут можно написать bat, который выполнит необходимые процедуры.
Крайне желательно чтобы было видно какая ветка задеплоена без копания в логах
Я бы в пути артефактов вставил в выходной путь переменную %vcsroot.branchName%. Так не ошибетесь.
Рад буду, если мой комментарий поможет.

создание отдельного билда(для нужной выбранной ветки) Вам не подходит?


По сути 1 и 2 отличаются только тем, что 2 триггерится автоматически на коммиты в конкретную ветку, а в 1 при запуске нужно указать ветку/таг/коммит. На псевдокоде


onCommit('develop') {
   ref = 'develop'
   env = 'dev-server'
   artifacts = build(ref)
   deploy(artifacts, env)
}

onClickDeploy() {
   ref = prompt('Enter git reference')
   env = 'dev-server'
   artifacts = build(ref)
   deploy(artifacts, env)
}

Я бы в пути артефактов вставил в выходной путь переменную %vcsroot.branchName%. Так не ошибетесь.

Хочется сделать чтобы неподготовленному пользователю с первого взгляда было понятно на каком енве какая ветка задеплоена, а не прописывать ему инструкцию по последовательности кликания по проектам и подпроектам, чтобы выяснить какие ветки каких репозиториев задеплоены на дев-контур.

тяжеловатое у Вас изложение, но насколько понял из второй части Вашего комментария, Вы хотите сначала протестировать код, а только потом его выложить в прод? Тогда Вам нужно добавить в билд-зависимости те тесты, которые пишет QA. И настроить основной билд, так чтобы он собирался только после успешного билда тестов. Соответственно, если тесты пройдены, то можно релизить на прод, если нет, то пересборки кода не произойдет.

Извините, в полпятого утра писал при нормальном графике...


Автоматические тесты небольшая проблема, но QA ещё на стейджинге руками клацают, в любом случае нужно ручное подтверждение переноса со стейджинга на прод. Желательно именно переноса, то есть билд на стейджинг и прод должен один и тот же деплоиться.

Не извиняйтесь — все нормально, тем более для 4 утра )
как вариант, правда на мой взгляд не очень правильный, можно создать 2 ветки в vcs и 2 билда соответственно. Одна для стейджа, а другая, дефолтная, для прода. Если все норм в стейджевой ветке — сливать изменения в дефолтную(заменит ручное подтверждение).
Еще вариант — управлять этим всем через Kubernetes.
Впрочем, подумаю, может еще идея какая-нибудь в голову придет.

Kubernetes точно не вариант на ближайший год.


Про ветки тоже думал, но сложно обеспечить выкладку на прод именно того билда, что был на стейдже — очевидный вариант по хэшу коммита различать артефакты не работает при мержах, если не обеспечивать fast forward only стратегию через rebase постоянные. Может ввести релизные таги и по ним как-то триггерить деплой на прод — хэш коммита не поменяется. Надо в эту сторону подумать. Может сделать отдельный (агрегированный) билдчейн, который QA будут пуками запускать, чтобы пробегался по репам и ставил и пушил таги, а уж на них как-то привязать триггер для деплоя на прод.

Можно настроить такой build chain: Build -> Test -> Deploy to staging -> Deploy to prod, и повесить VCS триггер на Deploy to staging. В этом случае дальше выкладки на стейджинг чейн не пойдет, пока его кто-то руками не запустит. Для этого можно на нужном билде (который, например, протестировали вручную) в конфигурации Deploy to staging выбрать Actions -> Promote to Deploy to production.

Вот здесь есть очень похожий чейн (можно зайти гостем): demo.teamcity.com/viewLog.html?buildId=2348&buildTypeId=GuestbookAws_Deploy_DeployStaging&tab=dependencies#_expand=block_bt18-2348

Вот интересная идея. Про Promote to Deploy to production не знал.

Причем если для Deploy to production конфигурации выбрать тип «Deployment» (в General настройках конфигурации), то во всех билдах, от которых она зависит появится секция Deployments на overview с кнопкой Deploy.
image

Спасибо. Настраивал, но не замечал влияние на зависмости.

Начинаю сомневаться, но по-моему Вы немного перепутали Snapshot Dependencies и Build Dependencies. Snapshot Dependencies — это зависимость от «подходящего» билда (ну мало ли, собрать нужно с конкретной версией либы), а Build Dependencies, по факту, от любой и, как правило, последней.
yegnau, может подскажете по Clean-up Rules? Хранятся билды, уже достаточно старые, а мне нужны, скажем, последние 5 успешных. Как настроить на хранение 5 успешных билдов?
Настройки проекта -> Clean-up Rules -> Add rule. Там нужно в билд фильтре выбрать Status: only successful, Range: 5 last builds.
все так, но по-моему не работает. Принудительно запускаю очистку.
Попробуйте проверить настройки в родительских проектах – например, в руте. TeamCity настроен таким образом, что если он находит Keep Rules на уровне выше, то они будут приоритетнее.
арбайтен, арбайтен!!! Ура!!! Работает ;)
Мне тимсити нравится за то, что он очень интуитивный — но в данном случае правило задается неявно по отношению к проекту.

Настраиваю сборку Android-проекта в TeamCity Cloud, требуется указать ANDROID_HOME.
Не подскажете пример, где это указывается и как должен выглядеть путь?
Предполагаю, что это нужно прописывать в Build Step -> Command Line ->...

Sign up to leave a comment.