Intereting Posts
Как сохранить пользовательские шаблоны страниц WordPress в другой папке, кроме папки темы Вход в Facebook / Регистрация с помощью Codeigniter – данные пользователя Zend Framework 2: как разместить перенаправление в модуль, прежде чем приложение достигнет контроллера Динамически рассчитать цену продукта на основе значений настраиваемых полей при добавлении в корзину Как загрузить изображение в базу данных с помощью php-скрипта? htaccess перенаправляет с маскировкой домена, не работающей при запросе корневого каталога Как использовать CSV MIME-тип? Получить массив отношений модели Eloquent Преобразование mysql в mysqli – как получить суперглобальный объект соединения? Apache RewriteRule. * Index.php Не работает HTML-код и вывод кода Auto-indent Невозможно удалить специальные символы с помощью str_replace Создание таблицы с PHP PHP: destructor vs register_shutdown_function Добавить элементы в отношение Phalcon Many-to-Many

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

Я разрабатываю рабочий процесс для практики в основном автоматизированного цикла непрерывного развертывания для проекта 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