Улучшения процесса выпуска - PullRequest
12 голосов
/ 23 апреля 2010

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

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

Итак, вопрос в том, укажите одну болезненную / трудоемкую часть вашего процесса выпуска и что вы делали для ее улучшения?

Мой пример: у предыдущего работодателя все разработчики вносили изменения в одну общую базу данных для разработчиков.Затем, когда пришло время выпуска, мы использовали SQL Compare в Redgate, чтобы сгенерировать огромный скрипт из различий между базами данных Dev и QA.

Это работает достаточно хорошо, но проблемы с этим подходом: -

  1. Включены ВСЕ изменения в базе данных Dev, некоторые из которых все еще могут быть «в процессе разработки».
  2. Иногда разработчики вносили противоречивые изменения (которые не были замечены, пока не был выпущен релиз)
  3. Это был трудоемкий и ручной процесс создания и проверки сценария (я имею в виду проверку, попробуйте отсеять такие проблемы, как проблемы 1 и 2).
  4. Когда возникли проблемы ссценария (например, порядок, в котором выполнялись такие вещи, как создание записи, основанной на записи внешнего ключа, которая находится в сценарии, но еще не запущена), потребовалось время, чтобы «настроить» ее, чтобы она работала плавно.
  5. Это не идеальный сценарий для непрерывной интеграции.

Таким образом, решение было: -

  1. Применение политикивсе изменения в базе данных должны быть записаны в сценарии.
  2. Соглашение об именовании было важно для обеспечения правильного порядка выполнения сценариев.
  3. Создание / использование инструмента для запуска сценариев во время выпуска.
  4. У разработчиков была своя собственная копия базы данных, с которой она разрабатывалась (поэтому больше не было «наступать друг на друга»)

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

Как только проблемы с выпуском в QA были исправлены, когда пришло время выпускать в производствоэто было очень гладко.

Мы применили несколько других изменений (например, введение CI), но это было самым значительным, в целом мы сократили время выпуска с примерно 3 часов до максимум 10-15 минут.

Ответы [ 7 ]

3 голосов
/ 05 мая 2010

Мы уже использовали TeamCity (отличный инструмент непрерывной интеграции) для выполнения наших сборок, которые включали модульные тесты.Было упомянуто три больших улучшения:

1) Установочный комплект и развертывание UAT в один клик

Мы упаковали наше приложение как установочный комплект, используя NSIS (не MSI, который был гораздо более сложным и ненужным для наших нужд).Этот установочный комплект сделал все необходимое, например, остановил IIS, скопировал файлы, поместил файлы конфигурации в нужные места, перезапустил IIS и т. Д. Затем мы создали конфигурацию сборки TeamCity, которая запустила этот установочный комплект удаленно на тестовом сервере, используя psexec.

Это позволило нашим тестировщикам самим развертывать UAT, если они не содержали изменений в базе данных - но они были намного реже, чем изменения кода.

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

2) Автоматизация развертывания базы данных

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

Сценарии БД были организованы в структуру каталогов по номеру выпуска.В дополнение к сценариям разработчики должны были добавить имя файла сценария в текстовый файл, по одному имени в строке, в котором указан правильный порядок.Мы написали инструмент командной строки, который обработал этот файл и выполнил сценарии для данной БД.Он также записал, какие сценарии он выполнял (и когда) в специальной таблице в БД, и в следующий раз он не запустил их снова.Это означает, что разработчик может просто добавить сценарий БД, добавить его имя в текстовый файл и запустить инструмент для БД UAT, не спрашивая других, какие сценарии они выполняли последними.Мы использовали один и тот же инструмент в работе, но, конечно, он запускался только один раз в каждом выпуске.

Дополнительный шаг, который действительно помог этой работе, - это запуск развертывания БД как части сборки.Наши модульные тесты работали с реальной БД (очень маленькой, с минимальными данными).Сценарий сборки восстановит резервную копию БД из предыдущего выпуска, а затем запустит все сценарии для текущего выпуска и создаст новую резервную копию.(На практике это было немного сложнее, потому что у нас также были выпуски исправлений, и резервное копирование делалось только для полных выпусков, но инструмент был достаточно умен, чтобы справиться с этим.) Это гарантировало, что сценарии БД были протестированы вместе при каждой сборке, и если разработчики вносят противоречивые изменения в схему, она будет быстро обнаружена.

Единственные ручные действия были во время выпуска: мы увеличивали номер выпуска на сервере сборки и копировали «текущую БД»резервное копирование, чтобы сделать его «последней версией» резервной копии.Кроме того, нам больше не нужно было беспокоиться о БД, используемой при сборке.Иногда необходимо было восстановить базу данных UAT из резервной копии (например, поскольку система не смогла отменить изменения для удаленного сценария БД), но это было довольно редко.

3) Ветвление дляrelease

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

3 голосов
/ 23 апреля 2010

Мы сделали несколько вещей за последний год или около того, чтобы улучшить наш процесс сборки.

  1. Полностью автоматизированная и полная сборка. У нас всегда была ночная «сборка», но мы обнаружили, что существуют разные определения того, что составляет сборку. Некоторые считают его компиляцией, обычно люди включают юнит-тесты, а иногда и другие вещи. Мы разъяснили, что наша автоматизированная сборка буквально делает все необходимое для перехода от контроля версий к тому, что мы доставляем заказчику. Чем больше мы автоматизируем различные детали, тем лучше процесс, и тем меньше нам приходится делать вручную, когда наступает время выпуска (и меньше беспокоиться о том, чтобы что-то забыть). Например, наша версия сборки помечает все с номером ревизии svn, компилирует различные части приложения, выполненные на нескольких разных языках, выполняет модульные тесты, копирует результаты компиляции в соответствующие каталоги для создания нашего установщика, создает фактический установщик, копирует установщик в наша тестовая сеть запускает установщик на тестовых компьютерах и проверяет, правильно ли установлена ​​новая версия.

  2. Задержка между завершением кода и выпуском. Со временем мы постепенно увеличивали задержку между завершением написания кода для определенного выпуска и получением этого выпуска для клиентов. Это дает тестерам больше времени для тестирования продукта, который практически не меняется и производит более стабильные производственные выпуски. Ветвь управления слияниями / слияние здесь очень важны, так что команда разработчиков может работать над следующей версией, пока тестеры все еще работают над последней версией.

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

2 голосов
/ 06 мая 2010

Автоматизируйте ваш процесс релиза везде, где это возможно.

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

Это может включать

  • двоичные файлы,
  • JAR / WAR-архивы,
  • файлы конфигурации по умолчанию,
  • установка схемы базы данныхсценарии,
  • сценарии миграции базы данных,
  • сценарии конфигурации ОС,
  • страницы man / hlp,
  • документация HTML,
  • документация PDF

и так далее.Сборка установщика может объединить все это в устанавливаемый пакет (InstallShield, ZIP, RPM или любой другой) и даже собрать ISO-образы компакт-дисков для физического распространения.

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

1 голос
/ 05 мая 2010

Согласен с предыдущими комментариями.

Вот что изменилось в моей работе.Этот текущий процесс устранил «ошибки», которые вы описали в своем вопросе.

Мы используем ant для извлечения кода из svn (по версии тега) и извлечения зависимостей и построения проекта (а иногда итакже для развертывания).

Один и тот же муравейный скрипт (передача параметров) используется для каждого env (dev ,интеграция, тест, продукт).

Процесс проекта

  • Захват требований в виде «пользовательских историй» (помогает избежать спора о толковании требования, если его сформулировать как осмысленное взаимодействие пользователя с продуктом)
  • , следуя принципам Agile, чтобы каждая итерацияпроект (2 недели) приводит к демонстрации текущей функциональности и выпускаемому, хотя и ограниченному, продукту
  • для управления историями выпуска по всему проекту, чтобы понять, что входит и выходит за рамки (и предотвратить путаницу с последними исправлениями)
  • (повтор предыдущего ответа) Замораживание кода, затем только проверка (без дополнительных функций)

Процесс разработки

  • модульные тесты
  • проверка кода
  • запланированные автоматические сборки (например, круиз-контроль)
  • завершить сборку / развертывание насреда интеграции и запускает тест дыма
  • помечает код и сообщает команде (для тестирования и планирования выпуска)

Процесс тестирования

  • функциональное тестирование (например, селен)
  • выполнение планов тестирования и функциональных сценариев

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

Процесс выпуска

  • Утверждение выпуска на определенную дату / время
  • Просмотр плана выпуска / отката
  • запустить ant с параметром «производственное развертывание»
  • выполнить задачи БД (если есть) (также эти сценарии могут быть версиями и помечены для производства)
  • выполнить другие системные изменения/ configs
  • сообщить об изменениях
1 голос
/ 23 апреля 2010

Автоматизированная пошаговая сборка.Сценарий ant build редактирует все файлы конфигурации установщика, программные файлы, которые необходимо изменить (управление версиями), а затем выполняет сборку.Никакого вмешательства не требуется.

По-прежнему выполняется сценарий для генерации установщиков после его завершения, но мы это исключим.

Версии обложки компакт-диска вручную;это тоже нужно исправить.

0 голосов
/ 09 мая 2010

В проекте, где я работаю, мы использовали миграции Doctrine (PHP ORM) для обновления и понижения базы данных. У нас были всевозможные проблемы, поскольку сгенерированные модели больше не соответствовали схеме базы данных, что приводило к полному сбою миграций.

В конце мы решили написать нашу собственную супер базовую версию того же самого - ничего особенного, только взлеты и падения, которые исполняют SQL. Как бы то ни было, все получилось отлично (пока что - дотронуться до дерева). Хотя мы немного изобрели колесо, написав свое собственное, тот факт, что основное внимание было уделено простоте, означало, что у нас гораздо меньше проблем. В настоящее время релиз является подпоркой.

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

0 голосов
/ 05 мая 2010

Я не знаю или не практикую SDLC, но для меня эти инструменты были необходимы для достижения плавных выпусков:

  • Maven для сборки, с Nexus администратором локального хранилища.
  • Hudson для непрерывной интеграции, сборок выпусков, маркировки SCM и продвижения сборки
  • Сонар для показателей качества.
  • Отслеживание изменений базы данных в схеме БД разработки и управление обновлениями для qa и выпускачерез DbMaintain и LiquiBase
...