Каков ваш любимый рабочий процесс развертывания веб-приложений с помощью SVN?
В настоящее время мы используем несколько сложную установку развертывания, которая включает в себя удаленный сервер SVN, 3 ветки SVN для DEV, STAGE и PROD, продвижение кода между ними через патчи и т.д. Интересно, что вы используете для развертывания в небольшом команда разработчиков?
Ответы
Ответ 1
для разработки, а также ветвь (производство) для производства.
На моей локальной машине у меня есть VirtualHost, который указывает на ветвь соединительной линии, чтобы проверить мои изменения.
Любая фиксация для соединительной линии запускает крючок фиксации, который выполняет экспорт svn и синхронизацию с URL-адресом разработчика онлайн-сервера, поэтому, если на сайте находится stackoverflow.com, этот крюк автоматически обновляет файл dev.stackoverflow.com
Затем я использую svnmerge для слияния выделенных патчей с соединительной линии в производство в моих локальных проверках. У меня есть VirtualHost снова на моей локальной машине, указывающей на производственную ветвь.
Когда я совершаю объединенные изменения в производственной ветки, снова крюк экспорта SVN обновляет производственный (живой) экспорт, и сайт жив!
Ответ 2
Когда я работал в небольшой команде разработчиков (маленький смысл меня, другой программист и босс), это был довольно хаотичный беспорядок. Однако мы обнаружили, что для нас сработало задание типа "привратника".
Привратник был человеком, который проделал большую работу над приложением (в этом случае у меня было 2 проекта, которые я разработал с нуля, ему было 4).
В принципе, всякий раз, когда он должен был работать над моими проектами, он уведомлял меня, что он работает, я бы удостоверился, что репозиторий был обновленным и готовым к работе, затем он сбрасывал, делал свои изменения, затем совершите. Он сообщил бы мне, что это было сделано, я бы потянул, построил и развернул. Если были изменения в БД, у нас была папка смены DB со всеми скриптами, которые исправили бы БД.
В нем, очевидно, было много дыр, но процесс работал для нас и не позволял нам строить друг над другом.
Ответ 3
Три ветки просто звучат как дополнительная работа.
Различия в окружающей среде могут быть устранены путем использования различных версий соответствующих файлов в багажнике. т.е. database.yml и database.yml.prod. Процесс развертывания должен быть экологически безопасным и просто копировать файлы для каждой среды по умолчанию.
Ответ 4
У меня не было проблем с общими тегами/ветвями/организацией магистрали.
Общее развитие продолжается в багажнике.
Поддержание выпуска в производстве происходит в соответствующей ветки выпуска.
Изменения в ветки освобождения, которые по-прежнему относятся к соединительной линии, объединяются.
Когда новая версия готова к развертыванию, она помечена из соединительной линии, затем из этого тега создается ветка. Новая ветвь выпуска проверяется сервером параллельно текущей версии. Когда он переключается, пути жонглируются ( "mv appdir appdir.old & mv appdir.new appdir" ).
Разработчики, поддерживающие выпуск продукции, затем svn переключают свою рабочую копию на новую ветку или выполняют новую проверку.
Ответ 5
Простая ветвь соединительной линии содержит самый последний код, а затем разрезает ветвь всякий раз, когда мы живем. Это, похоже, работает довольно эффективно. Вы можете легко перейти к предыдущей ветке всякий раз, когда текущая ветка, которую вы вырезали для живой системы, терпит неудачу. Кроме того, легко исправить ошибки в ветке, которая в настоящее время живет, и поскольку ветвь эффективно умирает, когда вы разрезаете новую, существует только одна реальная ветка, на которой вам нужно работать (а затем слияние исправлений оттуда живая ветка).
Ответ 6
Мы не используем ветки для создания веб-материалов; только для тестирования экспериментальных вещей, которые займут много времени (читай: более одного дня), чтобы объединиться обратно в багажник. Строка в стиле "непрерывной интеграции" представляет собой (надеюсь) рабочее, текущее состояние.
Таким образом, большинство изменений передаются прямо в багажник. Сервер CruiseControl.NET автоматически обновляется на машине, которая также запускает IIS, и имеет обновленные копии всех доступных ресурсов сайта, поэтому сайт может быть полностью, тщательно протестирован внутри компании. После тестирования файлы загружаются на общедоступный сервер.
Я бы не сказал, что это идеальный подход, но он прост (и, следовательно, подходит для нашего относительно небольшого персонала) и относительно безопасен, и работает отлично.
Ответ 7
Магистраль содержит текущую "основную" базовую базу разработки.
Разработчик часто создает отдельную ветку для любого проекта с среднесрочным и долгосрочным сценами, который может вставлять кодовую базу trunk и мешать другим разработчикам. Когда он закончит, он снова сольется с багажником.
Мы создаем tagged-release каждый раз, когда мы выставляем код для производства. Папка в /tags - это просто номер версии.
Для развертывания в производство мы делаем SVN Export to Staging. Когда это удовлетворительно, мы используем простой rsync для развертывания в производственных кластерах.
Ответ 8
Я очень рекомендую книгу (в настоящее время в грубом разрезе) Непрерывная доставка, в которой описывается полный процесс управления поставкой программного обеспечения на основе непрерывного принципы интеграции (среди прочих).
Мне сильно не нравится подход ветки и слияния, поскольку он может стать очень грязным и довольно расточительным, поскольку вы в конечном итоге тратите время на действия, которые на самом деле не приносят никакого нового значения. Вы уже разработали, протестировали и исправили свой код один раз, зачем создавать ситуацию (копирование кода в другую ветку), которая требует повторной работы?
В любом случае, способ избежать ветвления и слияния состоит в том, чтобы построить ваши развертываемые артефакты из магистрали и продвигать построенные артефакты (а не исходные), когда он проходит тест, этап и т.д. Таким образом, вы на 100% уверены, что вещь вы вводите в производство то же самое, что вы тестировали.
Если у вас есть разные функции, которые могут быть выпущены в разных расписаниях, изменение вашего подхода к тому, как вы реализуете (сделать функциональность настраиваемой или, еще более модульной), может помочь вам сохранить единый канал разработки.
Ответ 9
Мы используем разветвление выпусков - это, по-видимому, более эффективно для нас, чем разветвление функций, которое мы делали.
Не создавайте разные ветки для разных сред.
Ответ 10
Я лично работаю на месте (разработка), добавляя/фиксируя функции, и когда я думаю, что он готов, я беру на себя багаж (производство). На рабочем сервере я просто обновляю svn.
Ответ 11
Я работаю с аналогичной ситуацией с тем, что у вас есть. Мне было поручено найти "лучшее решение", и оно выполняло что-то в следующих строках:
Прямая ветвь представляет серверы в их текущем состоянии.
Любая работа над разработкой должна выполняться в ветке, которая берется из жизни. Это может быть одночасовая работа на полчаса или многолетний многолетний проект. Как часто, как любимые изменения в жизни, можно объединить в эти отрасли развития.
Перед тем, как часть работы перейдет в живую, изменения с живого снова сливаются и помечены как потенциальный выпуск. Этот выпуск тестируется в промежуточной среде, и если он проходит тестирование, новый живьет берется из тега.
Можно объединить несколько частей работы в один выпуск, если это работает лучше.
Это означает, что достаточно просто обновлять ветки развития в режиме реального времени, и если часть работы в разработке отбрасывается, минимальный порядок утилит.
Чтобы перейти от работы над одним проектом к другому, разработчик может просто переключить свою локальную рабочую среду на другую ветвь.
Одна из проблем, с которыми мы столкнулись с системой, как вы описали, заключается в том, что DEV может быстро устаревать с PROD, поэтому вы не развиваетесь против живого, и нелегко определить поперечные зависимости до этапа. Вышеупомянутое решение решает эти проблемы, оставаясь при этом довольно легким.