Пара слов про непрерывную интеграцию и xinc 
Я большой сторонник agile development, многие идеи этой методологии реально помогают делать хорошие программы с меньшими усилиями. Недавно меня заинтересовал вопрос непрерывной интеграции (Continuous Integration). В этой заметке я хочу поделиться некоторыми соображениями на эту тему.
Для тех, кто не знает, непрерывная интеграция - это практика разработки программ, основанная на автоматизации процессов сборки, тестирования и публикации проектов. Более подробно об этом можно прочитать тут.
Чего хочется
Сейчас я работаю в паре с еще одним программистом (планируется увеличить команду до четырех человек), причем территориально мы находимся в разных городах, поэтому качество нашей работы напрямую зависит от того, насколько эффективно построено взаимодействие между нами. Сейчас для обмена кодом мы используем систему контроля версий bazaar (нравится возможность делать локальные коммиты). Сборка и публикация выполняется вручную. А хотелось бы делать все автоматически.
Очень надеюсь, что непрерывная интеграция решит часть вопросов. Процесс я себе представляю следующим образом:
- На сервере (пока это моя машина) из репозитория скачивается последняя версия кода
- Настраивается необходимое окружение
- Запускаются тесты
- Если тесты прошли успешно, то проект публикуется на сервер
- Если возникают проблемы, мне приходит письмо об ошибке, и я устраняю неполадки.
Почему хочется
Во-первых, мой напарник в процессе написания кода может изменить модули, на которых базируется мой код. В результате, мои тесты могут перестать работать, а я об этом узнаю только после того, как синхронизируюсь с репозиторием.
Во-вторых, в процессе разработки я не запускаю все функциональные тесты. Все тесты запускаются непосредственно перед публикацией проекта. А чем чаще запускается полный набор тестов, тем лучше. Ну так и пусть их в фоновом режиме гоняет сервер. А мне нужно будет реагировать только на провалы при проведении функциональных тестов. В случае успешного прохождения публикация будет выполнена автоматически.
Как сделать
Технически все будет реализовано на xinc. И вот почему:
- Он написан на php5
- Поддерживает phing
- Поддерживает phpunit
Сейчас я занимаюсь тем, что тестирую xinc, пока есть только одна претензия - чрезмерно сложный процесс установки и настройки. Но стоит разобраться с этим вопросом однажды, и потом можно забыть.
Возможно, есть более интересные решения для организации непрерывной интеграции, поэтому буду благодарен за любой совет.
подписаться на блог
dkrnl
Гость
Женя респект! (:
Я пока до Continuous Integration не дорос. Временные затраты на первичном этапе отодвигают исследования в этом направлении.
Насчет “Настраивается необходимое окружение” - Кто это делает? Заведение хоста в апаче, создание бд, пользователей, разворачивание дампов, прописывание конфигов…
Вероятно руками, это и как раз узкое место получается: один шаг до идеальных Night Builds. (:
Slach
Гость
тоже пробовал в свое время XINC,
по моему Бергман его сильно забросил
все усилия сосредоточены были в сторону phpUnderControl
попробуйте http://buildman.limb-project.com/
он проще в установке и настройке
и поддержка phing
сводится к запуску phing -f build.xml
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
@dkrnl, настройка необходимого окружения делается через phing, там что хочешь можно написать
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
@Slach, заинтересовал buildman. Действительно очень простой, а функционала вполне достаточно для моих задач.
Сергей Шепелев
Гость
Я использовал Hudson для фоновых тестов и уведомлений. Достаточно просто и в общем-то удобно. Жалко только что для такой простой задачи запускается жирная JVM.
Ещё Hudson умеет кидать задачи на несколько машин, но мне не понадобилось.
Leave a Reply