Я разрабатываю рабочий процесс для практики в основном автоматизированного цикла непрерывного развертывания для проекта PHP. Я хотел бы получить некоторые отзывы о возможных технологических или технических узких местах в этом рабочем процессе, предложениях по улучшению и идеях о том, как лучше автоматизировать и увеличить простоту использования для моей команды.
Hudson
CI Git
и GitHub
PHPUnit
тесты PHPUnit
Selenium RC
Sauce OnDemand
для автоматического, кросс-браузерного тестирования облаков с помощью Selenium RC
Puppet
для автоматизации развертывания тестовых серверов Gerrit
для Git Gerrit Trigger
для Hudson
EDIT : я изменил графику рабочего процесса, чтобы принять во внимание вклад ircmaxwell: удаление расширения PHPUnit
для Selenium RC
и запуск этих тестов только в рамках этапа QC; добавление стадии КК; перемещение тестирования пользовательского интерфейса после проверки кода, но до слияния; перемещение сливается после этапа контроля качества; перемещение развертывания после слияния.
Этот рабочий процесс описывает процесс. Мои вопросы / мысли / проблемы следуют.
Общая сложность использования этой системы.
Время участия.
Трудность с использованием Gerrit
.
Трудности с использованием Puppet
.
Позже мы будем развертывать экземпляры Amazon EC2
. Если мы собираемся настроить пакеты Debian
с помощью Puppet
и развертывать их на Linode
срезах, есть ли потенциал для рабочего развертывания Linode
для Linode
EC2
? Должны ли мы вместо этого делать наши сборки и развертывания на EC2
с самого начала?
Другой вопрос: EC2
и Puppet
. Мы также рассматриваем использование Scalr в качестве решения. Разве было бы разумно избегать накладных расходов на Puppet
для этого и вместо этого инвестировать в Скалр? У меня есть вторичная (га!) Проблема здесь о стоимости; тесты Selenium
не должны запускаться так часто, что экземпляры сборки EC2
будут работать 24/7, но для чего-то вроде пятиминутной сборки, плата за час использования EC2
кажется немного.
Возможные узкие места процесса при слияниях.
Можно ли переместить «А»?
Кредиты : Части этого рабочего процесса вдохновлены удивительным сообщением Digg о непрерывном развертывании . График рабочего процесса, приведенный выше, вдохновлен проектом Android OS .
Сколько человек работает над этим? Если у вас есть только 10 или 20 разработчиков, я не уверен, что будет целесообразно внедрить такой сложный рабочий процесс. Если вы управляете 500, обязательно …
Мое личное чувство – KISS. Keep It Simple, Stupid … Вы хотите, чтобы процесс был эффективным, и более важным: простым. Если это сложно, либо никто не собирается делать это правильно, или после того, как часть времени проскользнет. Если вы сделаете это простым, это станет второй натурой, и через несколько недель никто не станет подвергать сомнению этот процесс (ну, в любом случае, семантика этого) …
И другое личное чувство всегда запускает все ваши тесты UNIT. Таким образом, вы можете пропустить общее дерево решений в своей блок-схеме. В конце концов, что более дорого, несколько минут процессорного времени, или мозговые циклы, чтобы понять разницу между частичным тестированием и массивным тестом. Помните, что неудача – это провал, и нет никакой практической причины, чтобы код когда-либо показывался рецензенту, который имеет потенциал для сбоя сборки.
Теперь тесты Selenium обычно довольно дороги, поэтому я могу согласиться отодвинуть их до тех пор, пока рецензент не одобрит их. Но вам нужно подумать об этом …
О, и если бы я это реализовал, я бы поставил там формальный этап контроля качества. Я хочу, чтобы человеческие тестеры смотрели на любые изменения, которые происходят. Да, Селен может проверить то, о чем вы знаете, но только человек может найти то, о чем не думал. Отправляйте свои результаты в новые тесты Selenium и Integration для предотвращения регрессий …
Importent, чтобы сделать ваши тесты очень быстрыми , то есть без ввода-вывода и возможности запуска параллельных и распределенных тестов. Не знаю, как это применимо с php, но если вы можете тестировать единицы кода с помощью памяти db и высмеивать среду, вам будет лучше.
Если у вас есть QA / QC или любой человек в отношениях между фиксацией и производством, у вас возникнет проблема с полным непрерывным развертыванием . Ключом является ваше доверие к вашему тестированию, мониторингу и автоответчику (иммунной системе), достаточным для устранения процесса, подверженного ошибкам, из-за которого люди развиваются из вашей системы.
Все хэндоверы между функциями приводят к замедлению работы, а вместе с этим и увеличению количества изменений (и, следовательно, рисков), которые входят в развертывание.
Ручные ворота качества по определению являются признанием того, что качество не было построено с самого начала. Единственный код причины должен быть рассмотрен позже, потому что есть убеждение, что качество уже недостаточно.
В настоящее время я пытаюсь удалить официальную проверку кода из наших конвейеров именно по этой причине. Это приводит к задержкам с обратной связью и цитирует Мартина Фаулера:
«Весь смысл непрерывной интеграции – обеспечить быструю обратную связь. Ничто не засасывает кровь активности CI больше, чем сборка, которая занимает много времени».
Вместо этого я бы хотел, чтобы код просмотрел что-то, что отправители запрашивают, если это требуется, или иначе делается во время кодирования членами команды, возможно, программирование пары la XP.
Я думаю, что ваша цель должна заключаться в том, что, как только код будет объединен с контролем источника, абсолютно никакого вмешательства вручную.
Я не знаю, относится ли это к PHP, но вы можете заменить по крайней мере часть этапа обзора кода статическим анализом.
Качество обзоров кода основывается на качестве рецензентов, в то время как статический анализ основан на передовых методах и шаблонах и полностью автоматизирован. Я не говорю, что обзоры кода должны быть оставлены, я просто думаю, что это можно сделать в автономном режиме.
Видеть
http://en.wikipedia.org/wiki/Static_code_analysis
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis