Внезапно захотелось рассказать о том, чем я сейчас занимаюсь на работе…
Делаем сейчас SOA систему, на основе продуктов BEA и Adobe. Моя задача – поддержка continuous integration, то есть я делаю так, чтобы проекты собирались регулярно и как можно меньшими усилиями.
Проектов пока 9, но в недалёком будущем будет около 20и (есть пара очень сложных, которые будем разбивать на куски). Это не считая branches. Вся эта братия раз в час компилится, собирается в жабьи архивы и деплоится на сервера.
Серверов 7, все сервера – зоны на одном большом SPARK Solaris. CruiseControl (это то, что запускает билды раз в час) крутится на 8ом сервере и деплоит все собранные проекты удалённо посредством ssh. На серверах один или два Weblogic domains, куда, собственно все проекты и устанавливаются. В не таком уж и отдалённом будущем все эти домены будут представлять из себя кластера, что сути моих билдов совершенно не меняет.
А вот на следующей неделе предстоит огромный траходром с построением и запуском отдельного билда, который будет собирать все эти проекты вместе, правильно их конфигурить и запускать автоматическое тестирование. Как это делать посредством CruiseControl я представляю смутно, но деваться некуда, поэтому буду рассматривать разные возможные варианты.
Вот такие вот серые будни…
серые будни — завтра жду.
хоть в 10 утра. но на самом деле огонь подожгу в час где-то
если в круиз контроле ничего радикально не поменялось за последние полтора года, то круиз контроль запускает антовые скрипты для сборки и запуска тестовпроверок кода. Тогда какие проблемы написать еще один ант билд файл который будет запускать эти 8-20 проэктов на сборку как внешние таски (я так понимаю они уже сейчас как-то антом собираютсятестируются) т.е. по сути задача скорее скучная, чем сложная.
Запускать 20 проектов заново – это значит остановить круизконтроль на полдня. Пока он там заново всё перекомпилит… А вот если б было бы нормальное project dependency, то интеграционный билд запускался бы только тогда, когда все входящие в него билды успешно собрались. Под это дело идеально подходит maven, но специфика проекта и сжатые сроки не позволяют так вот просто на него перейти.
Вот где-то после часа и подвалю. :о)
Вот на моей старой работе тоже maven для этого использовался. Вопрос- а что на выходе, что эта SOA будет делать?
Хм… Ну принципе почти все что делается в мавене делается и в анте и наборот.
Круиз умереть не должен ибо все проэкты компилятся в отдельных тредах, т.е. компиляция
сборкапроверкатестирование чего-то не влияет на остальные проэкты.
Депенденси в твоем понимании, реализовать довольно легко. Я вижу как минимум несколько вариантов:
во первых посмотри в сторону плагина compound у него есть понятие тригеров и таргетов.
во вторых это можно сделать средствами анта. Настрой интеграционный билд запускаться довольно часто по временному фактору и пусть при запуске проверяет изменение таймстемпа у каких-то файлов которе появляются в результате сборки отдельных билдов (Другой возможно более легкий вариант проверять номер билда. Вы же версионность ведете?) и интегрирует все только если что-то изменилось.
Таким образом круиз будет запускать сборку отдельного проэкта только если в нем произошли изменения – коммит. А интеграционный билд будет запускатся часто но интегрировать заново только если был собран один из подпроэктов.
в третьих можно написать свой плагин для круиза. Который будет проверять депенденси.
1. “Ну принципе почти все что делается в мавене делается и в анте и наборот.” То, что в мавене делается элементарно – антом делается путём конкретного геморроя.
2. “Круиз умереть не должен ибо все проэкты компилятся в отдельных тредах” Какая связь между сборкой в отдельных тредах и зависимостями между проектами? А что если у меня один проект собирает библиотеку, которая потом используется другим проектом? Сушить вёсла или заниматься проверкой флагов в виде файлов?
3. “Таким образом круиз будет запускать сборку отдельного проэкта только если в нем произошли изменения – коммит” Так он это и так делает. Стандартная фича. Но вот проблему зависимости проектов совсем не решает.
4. “А интеграционный билд будет запускатся часто но интегрировать заново только если был собран один из подпроэктов.” Мне не надо один. Мне надо чтобы интеграция запускалать только если все успешные.
Ну а плагин писать уж совсем некогда. Но если вариант с файлами-флагами не пройдёт, то буду смотреть в эту сторону, да.
Всебританская система отчётности финансовых организаций.