Подтвердить что ты не робот

Помогите мне улучшить рабочий процесс непрерывного развертывания

Я разрабатывал рабочий процесс для практического использования автоматизированного цикла непрерывного развертывания для проекта PHP. я "Мне нравится некоторая обратная связь о возможных процессах или технических узких местах в этом рабочем процессе, предложениях по улучшению и идеях о том, как лучше автоматизировать и увеличить простоту использования для моей команды.


Основные компоненты:

  • Hudson CI-сервер
  • Git и GitHub
  • PHPUnit модульные тесты
  • Selenium RC
  • Sauce OnDemand для автоматического, кросс-браузерного тестирования облаков с помощью Selenium RC
  • Puppet для автоматизации развертывания тестовых серверов
  • Gerrit для просмотра кода Git
  • Gerrit Trigger для Hudson

EDIT. Я изменил графику рабочего процесса, чтобы принять во внимание вклады в ircmaxwell: удаление расширения PHPUnit для Selenium RC и выполнение этих тестов только как часть этапа контроля качества; добавление стадии КК; перемещение тестирования пользовательского интерфейса после проверки кода, но до слияния; перемещение сливается после этапа контроля качества; перемещение развертывания после слияния.

Этот графический документ описывает процесс. Мои вопросы/мысли/проблемы следуют.

Continuous Deployment Workflow

Мои проблемы/мысли/вопросы:

  • Общая сложность с использованием этой системы.

  • Время участия.

  • Сложность с использованием Gerrit.

  • Сложность с использованием Puppet.

  • Мы будем развертывать в экземплярах Amazon EC2 позже. Если мы собираемся настроить пакеты Debian с Puppet и развернем теперь на Linode срезы, существует ли возможность для рабочего развертывания на Linode разбиться на EC2? Должны ли мы вместо этого делать наши сборки и развертывания на EC2 из get-go?

  • Другой вопрос re: EC2 и Puppet. Мы также рассматриваем использование Scalr в качестве решения. Будет ли это иметь смысл избегать накладных расходов Puppet только для этого и вместо этого инвестировать в Scalr? У меня есть вторичная (га!) Проблема здесь о стоимости; в тегах Selenium не должно быть , что часто, что экземпляры EC2 build будут работать 24/7, но для чего-то вроде пятиминутной сборки, заплатив за час EC2 использование кажется немного большим.

  • Возможные узкие места процесса при слияниях.

  • Можно ли переместить "A"?

Кредиты. Части этого рабочего процесса вдохновлены Digg awesome post при непрерывном развертывании. График рабочего процесса выше вдохновленный проектом ОС Android.

4b9b3361

Ответ 1

Сколько человек работает над этим? Если у вас есть только 10 или 20 разработчиков, я не уверен, что будет целесообразно внедрить такой сложный рабочий процесс. Если вы управляете 500, обязательно...

Мое личное чувство - KISS. Держите это просто, глупо... Вам нужен процесс, который эффективен и более важен: простой. Если это осложнится, либо никто не собирается делать это правильно, или после того, как части времени проскользнут. Если вы сделаете это простым, это станет второй натурой, и через несколько недель никто не будет подвергать сомнению этот процесс (ну, семантика этого в любом случае)...

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

Теперь тесты Selenium обычно довольно дороги, поэтому я могу согласиться отодвинуть их до тех пор, пока рецензент не одобрит. Но вам нужно подумать об этом...

О, и если бы я это реализовал, я бы поставил там формальный этап контроля качества. Я хочу, чтобы человеческие тестеры смотрели на любые изменения, которые происходят. Да, Селен может проверить то, о чем вы знаете, но только человек может найти то, о чем не думал. Верните полученные результаты в новые тесты Selenium и Integration для предотвращения регрессий...

Ответ 2

Импортировать, чтобы сделать тесты очень быстрыми, то есть без ввода-вывода и возможности запуска parallel и распределенных тестов. Не знаю, как это применимо с php, но если вы можете тестировать единицы кода с помощью памяти db и высмеивать среду, вам будет лучше.

Если у вас есть QA/QC или любой человек в отношениях между фиксацией и производством, у вас возникнет проблема с получением полного непрерывного развертывания. Ключом является ваше доверие к вашему тестированию, мониторингу и автоответчику (иммунная система), достаточное для устранения процесса, подверженного ошибкам, из-за которого люди развиваются из вашей системы.

Ответ 3

Все хэндоверы между функциями приводят к замедлению работы, а вместе с тем и увеличению количества изменений (и, следовательно, рисков), которые входят в развертывание.

Ручные калибровочные ворота по определению являются признанием того, что качество не было построено с самого начала. Единственный код причины должен быть рассмотрен позже, потому что есть убеждение, что качество уже недостаточно.

В настоящее время я пытаюсь удалить официальную проверку кода из наших конвейеров именно по этой причине. Это вызывает задержки обратной связи и цитирует Мартина Фаулера:

"Весь смысл непрерывной интеграции - обеспечить быструю обратную связь. Ничто не всасывает кровь активности CI больше, чем сборка, которая занимает много времени".

Вместо этого я хотел бы сделать проверку кода тем, что подающие запросы запросят, если это требуется, или иначе это делается во время кодирования членами команды, возможно, программирование пары la XP.

Я думаю, что ваша цель должна заключаться в том, что, как только код будет объединен с контролем источника, абсолютно не будет вмешательства вручную.

Ответ 4

Я не знаю, относится ли это к PHP, но вы можете заменить по крайней мере часть этапа обзора кода статическим анализом.

Качество обзоров кода зависит от качества рецензентов, в то время как статический анализ основан на передовых методах и шаблонах и полностью автоматизирован. Я не говорю, что обзоры кода должны быть оставлены, я просто думаю, что это можно сделать в автономном режиме.

См.

http://en.wikipedia.org/wiki/Static_code_analysis

http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis