четверг, 12 марта 2009 г.

Система билдов

Кстати, еще летом нас была совсем страшная система создания билда, java ant с вкраплениями питоновского кода.
Когда она ломалась - атас. Никто не проверял, чем закончились эти самые вызовы подпроцессов. Собиралка продолжала работать дальше. Очень долго.
Через примерно 40 минут можно было увидеть - билд не прошел. Почему - догадаться можно. Иногда. Часто - нет. Все очень сложно и запутанно. Повторить - извольте начать все сначала (40 мин, помните?)
И так раз за разом.

Летом я как раз был в Нью-Йорке пару месяцев. И выпала моя неделя почетного билдера. После третьего проблемного билда за мою неделю (мне везло просто сказочно) - озверел. Переписал все к черту.

Теперь, как водится, все делается Питоном. С очень строгими проверками. Теперь все бросает exception и он, заметьте, не съедается как except Exception - долго бил по рукам за такое. Еще бить и бить - есть их у нас в рабочем коде... Если сломалось - стоп с максимально полной инфой.

Система сделана в стиле: запустил и забыл. Иди пить свой кофе. Потом остается только проверить результат.
Билд - пошаговый (Бикинга вовремя почитал). Если шаг был успешен - запомним его (записали в локальный файл). Следующий шаг поломается - получим полную инфу и, самое главное, возможность продолжить с поломавшегося места минуя предыдущие шаги. При это в начале билд делает tag и patch. И есть возможность на этапе, например, сломавшихся юниттестов автоматически обновиться из trunk, сделать patch commit и новый tag. Сильно экономит время.
Все в целом сейчас - 10 мин. Потом идут regression tests, и тут уж помочь ничем нельзя.

Да, мы используем svn без branch for every new task. Такая схема работы - все в trunk. Был бы рад переключиться на bazaar (сторонникам mercurial и git - я вас тоже люблю и уважаю) - но невозможно сейчас по организационным причинам.

Посидев месяц почетным билдером, отладил систему до состояния швейцарских часов.

Теперь у нас скользящий график переходящего знамени. С маленькой поправкой. Индивидум, заваливший билд сегодня - получает знамя на два следующих дня (если завтра будут проблемы от другого индивидума - знамя незамедлительно переходит к виновнику). Очень эффективная система. Позволяющая получить некоторое удовлетворение от того, что ты до хрен знает какого часа решал проблемы, созданные другими.

Сейчас это как правило нерабочие regression - которые 40 мин (летом было 20) и полный стек мало кто проверяет. Я - крайне редко. Но если попался - получи свои 2 почетных дня.

Забавная система получилась.