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

Веб-разработка SVN

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

Наша настройка

  • База кода PHP (в частности, Kohana)
  • Кодовые базовые полномочия ~ 60 сайтов, каждая из которых имеет уникальные шаблоны (например, 60 QA [Quality Assurance]).
  • каждый сайт имеет A-записи для разных активов и ресурсов (т.е. 8 записей A для каждого домена)
  • 3 разработчиков
  • 3 дизайнера
  • разработчики имеют VMware-образ производственного сервера для локального развития.
  • дизайнеры не
  • общий сервер физического развития, используемый для QA, пост-фиксированное обновление постоянно держит этот сервер в текущем HEAD соединительной линии
  • производственный сервер, обновленный до сочетания и соответствия различных версий в зависимости от того, какие функции живут.

Наш рабочий поток

  • Разработчики работают локально, пока данная функция не будет завершена, а затем передаст всю функцию в магистраль для внутреннего QA.
  • Дизайнеры делают небольшие изменения только для CSS/изображений/шаблонов. Они непосредственно передают ствол, QA свои собственные изменения и обновляют соответствующие файлы на производственном сервере, вообще говоря, сразу после их QA.
  • Когда функции готовы к работе в прямом эфире, производственный сервер вручную обновляется до нужных номеров версий для каждого файла, связанного с этой функцией. Иногда это просто, иногда это довольно волосатое (много вызовов svn log для поиска зависимостей выше по течению).

Наши проблемы

  • С тремя разными разработчиками, работающими с различными функциями, которые нуждаются в различном количестве QA, мы регулярно сталкиваемся с проблемами зависимостей восходящей линии.
  • В любой момент времени у нас нет способа программно определить, какие функции находятся на рабочем сервере, а какие нет. svn status -u покажет нам, какие файлы не обновлены, но это, как правило, не четкое изображение функций.

Что я знаю

  • Некоторые из наших проблем можно было бы устранить, имея производственную ветвь. Мы могли бы, по крайней мере, контролировать, какие функции были добавлены в производство, и когда, хотя это не решит проблемы с обратной связью по потоку.
  • Функциональные ветки - это опция, и мы пробовали это в прошлом. В связи с тем, что для нашего программного обеспечения требуется 60 доменов QA для каждой ветки, мы сталкиваемся с проблемами управления процессом. Например, создание 480 (60 доменов x 8 записей на домен) A-записи для каждой ветки признаков.
  • Отрасль разработчика также является опцией, но время нашей функции QA меняется. Я не могу точно сказать, что предыдущая функция будет вне QA, прежде чем мне нужно будет что-то сделать.

Пример зависимостей в потоке

  • Разработчик A добавляет новую функцию слайд-шоу как для администратора, так и для интерфейса.
  • Разработчик B добавляет новую функцию обратной связи как в админе, так и в интерфейсе.
  • Обе эти функции переплетаются с логикой модели местоположения/контроллера, поэтому для этих связанных с ними файлов внесены изменения для учета обеих новых функций.
  • Функция слайд-шоу входит в QA, но поддерживается некоторой надзором за развитием или областью видимости.
  • Функция обратной связи вводит QA и проходит без проблем.
  • Мы хотим следить за временной шкалой и использовать функцию обратной связи для производства, но мы не можем сделать это напрямую, потому что обе функции требуют изменений в модели местоположения/контроллере. То есть мы не можем просто сделать svn update file1 file2 file3.
  • Примечание.. Это простой пример, и его можно обойти, сделав некоторое обратное слияние. Зачастую наши проблемы сложны, чем это.

Информация о нескольких сайтах

  • У нас есть несколько заранее определенных структурных тем, состоящих из представлений, изображений, файлов CSS, JS файлов и т.д.
  • Каждому сайту назначается тема.
  • Для целей брендинга и расширяемости каждый сайт может переопределять представление темы с помощью настраиваемого представления или включать дополнительные файлы CSS/JS для сайта.

Я уверен, что есть некоторые другие люди, которые боролись с подобными проблемами, и я надеюсь получить представление о вас умных людей в Интернете. Пожалуйста, не стесняйтесь задавать вопросы, если что-то, что я сказал, кажется ясным как грязь!

4b9b3361

Ответ 1

Ваш рабочий процесс может быть улучшен, вот список моих рекомендаций:

  • Начать использование ветвей SVN и выпускать сборки/развертывания в регулярном цикле.
  • Определите, как долго должен длиться цикл развертывания, оставляя время для QA. Так, например, если вы собираетесь выпускать сборку каждый месяц, у вас есть 3 недели разработки и 1 неделя QA. Завершить разработку для этой сборки через 3 недели, кроме исправлений ошибок.
  • Определите схему нумерации для ваших сборников, которая позволяет комнате расти
  • Используйте систему билетов (ActiveCollab, JIRA, Mantis... и т.д.) и применяйте правило, согласно которому любое обязательство должно быть связано с билетом. Выберите тот, где вы можете сделать свои коммиты автоматически отображаемыми в билете.
  • Если вы начнете документировать свои требования перед началом разработки, не собирайте свои требования в системе билетов (ради бога)
  • Выполнение этого поможет вам определить, какие функции находятся в данной сборке. Поэтому сделайте какие-то заметки о выпуске со списком номеров билетов или общее описание билетов для каждой сборки.
  • Вставьте свои номера сборки в приложение, чтобы вы могли отслеживать развертывание в любой заданной системе.
  • Начните работать с инструментами автоматического тестирования PHPUnit для модульных тестов и Selenium для функциональных тестов, чтобы ускорить QA и повысить качество/стабильность веб-приложения, уменьшив вероятность того, что повседневные изменения вносят новые ошибки.
  • Хадсон и Финг могут быть спасателями для автоматизации ваших сборных версий и автоматизации тестирования.

Ответ 2

Хорошо, пару мыслей:

Для такого рабочего процесса вы бы лучше сделали с SCM с моделью потока, например Accurev или ClearCase. В потоковой модели работа перетекает из каждого потока разработчиков в потоки интеграции, затем в потоки QA, затем выдает потоки (или все, что работает лучше всего). Только работа, готовящаяся к продвижению на следующий этап, продвигается вверх, и интеграция может быть выполнена только с этими путями работы.

Как сказал deceze, вам нужно разбить вещи более модульно, но вам также необходимо объединить его с системой локализации, где специфические для клиента функции могут переопределять определенные части кода. Один из способов, который я сделал в PHP, - это внедрить обертку импорта файлов PHP, которая сначала ищет версию файла PHP для конкретного клиента, а если она не существует, загрузите общий вариант.

function importModule($module, $clientId){
   if(is_file("${clientRootDir}/${clientId}/${module}.php")) {
      import("${clientRootDir}/${clientId}/${module}.php");
   } else {
      import("${defaultRootDir}/${module}.php");
   }
}

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

Наконец, с помощью этого множества различных "виртуальных веб-сайтов" для тестирования вам будет очень выгодно добавлять автоматическое модульное тестирование (a la PHPUnit) в сочетании с непрерывной интеграцией, чтобы автоматически запускать тесты, когда программное обеспечение работает до стадии интеграции.