Каков наилучший способ безопасной публикации сборки публикации сайта?
-
09-06-2019 - |
Вопрос
Итак, по вашему опыту, каков наилучший способ?Существует ли безопасный способ, который также можно использовать для создания сценариев в инструменте автоматизации сборки?
Редактировать:Я должен упомянуть, что это windows / .net, и я буду развертываться на iis6
Решение
Для некоторых проектов я использую Капистрано вытолкнуть наружу, чтобы жить.Он построен поверх ruby и делает написание скрипта развертывания очень простым и использует ssh.
В других проектах у меня есть крошечное приложение deploy, которое использует bash для экспорта svn во временный каталог, а затем повторно синхронизирует его с действующим сервером.Вы можете заставить rsync использовать ssh.
Я очень предпочитаю метод Capistrano, даже если ваш проект написан не на ruby / rails.
Другие советы
@Neall, я бы добавил set -e
во второй строке, потому что вы не хотите, чтобы текущий сайт заменялся, если rsync
выходит из строя по какой-либо причине. set -e
вызывает завершение работы скрипта в случае сбоя какой-либо из его команд.
Редактировать:Тот Самый set -e
это должно быть первым пунктом в сценарии, сразу после #!/bin/bash
.
Сделайте копию вашего каталога сайтов в реальном времени, используйте rsync чтобы обновить эту копию вашей последней версией, затем переименуйте действующие и обновленные каталоги, чтобы обновленная версия теперь была действующей.
В bash:
#!/bin/bash
set -e
cp -R /var/livesite /var/newversion
rsync user@devserver:/var/readytogolive /var/newversion
mv /var/livesite /var/oldlivesite
mv /var/newversion /var/livesite
Виола!
Редактировать:@Тед Персиваль - Это хорошая идея.Я даже не знал о "set -e".Обновленный скрипт.Редактировать:обновлено снова по предложению Ted (хотя я думаю, что это все равно сработало бы, если бы каким-то образом команда cp завершилась неудачей, и если cp завершится неудачей, у вас, вероятно, возникнут более серьезные проблемы.)
Я поддержу рекомендацию относительно Капистрано, хотя, если вы ищете решение на основе графического интерфейса, вы могли бы попробовать Вебистрано передний конец.Чистая семантика развертывания и отката на основе ssh, а также простые сценарии и расширяемость с помощью ruby.
Вы всегда можете написать небольшое клиент-серверное приложение, которое шифрует в источнике, отправляет файлы, а затем расшифровывает в пункте назначения.Это небольшая работа, но, вероятно, незначительная.И это возможно по сценарию до тех пор, пока ваш инструмент автоматизации поддерживает выполнение чего-либо в файловой системе (что, я думаю, все делают).
Единственным недостатком является то, что вы, возможно, не сможете получать значимые сообщения об ошибках при сбое в вашей среде интеграции без дополнительной работы с вашей стороны (хотя, в зависимости от ваших настроек, это может быть так же просто, как отправка сообщений об ошибках в стандартный вывод).
хм, здесь мы используем промежуточный "сервер" для целей тестирования в реальной среде (на самом деле, это виртуальный хост apache на рабочем сервере) и слияние араксиса (действительно умный инструмент построчного сравнения файлов) для синхронизации разработки и промежуточного выполнения.
как только его протестируют, просто;замените файлы на рабочем веб-корне :)
/мп
На моей внештатной работе мы создали три отдельных окружения.
- Запущенный сервер разработки продолжает сборку с использованием CruiseControl.Любая регистрация приведет к запуску сборки.Здесь было проведено тестирование качества.
- Тестовый сервер, на котором проводилось приемочное тестирование пользователей.
- Производство.
Рабочий процесс был следующим:
- Разработчик проверяет внесение изменений в SourceControl.
- CruiseControl создает и развертывает сборку для разработчиков.
- Разработчик находится под контролем
- После прохождения контроля качества запускается скрипт robocopy, который развертывает сборку разработчика для тестирования.
- Тест завершен
- После прохождения теста запускается скрипт robocopy, который развертывает Тест в PRD.