Развертывание PHP с помощью Git. Как я могу сделать его более автоматизированным?

Я отвечаю за запуск веб-проектов, и это занимает слишком много времени в настоящее время от подписывания клиента до окончательного запуска. Это на сервере, к которому у меня есть root-доступ, но он запускает Plesk, так что босс может настроить VirtualHosts, что означает, что на нем работает много сайтов.

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

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

Каждый выпуск проекта помечен текущей датой, например. git tag -a deployed-2011-04-20.

Итак, на промежуточном сервере я выполняю нечто похожее на git push --tags live master, которое нацелено на голый репо на реальном сервере.

Затем над SSH на реальном сервере я выполняю короткую bash script, которая в основном клонирует репозиторий из live live repo в папку Apache.

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

Это выглядит примерно так:

Forge (authoritative source)
  ^
  |
  v
Staging/development server
  |
  v
Live server bare repo
  |
  v
Releases folder (symlinked to htdocs)

Ответы

Ответ 1

Одним из решений, которое приходит на ум, является добавление некоторого крюка post-receive на серверный репозиторий live server для обнаружения любого развернутого тега-2011-xx-yy, исходящего из промежуточного репо, и для запуска ssh script оттуда.

Другое решение - иметь планировщик (например, упоминание Хадсона в pderaaij , в чтобы:

  • отслеживать репозиторию с указанием и, по правильному тегу, запускать нажатие на живой сервер
  • отслеживать живое репо и запускать ssh script.

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

Ответ 2

Взгляните на Capistrano, который с радостью описывает здесь символический танец.

Ответ 3

Если вы используете Hudson как непрерывный сервер интеграции, вы можете использовать плагин конвейера сборки.

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

Задача hudson может выполнять все необходимые команды, или вы можете заглянуть в Maven для PHP и использовать доступные плагины для вызова удаленного скрипты

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

Ответ 4

У нас есть пара друпальных сайтов, для которых мы разрабатываем, мы - команда из 4 разработчиков и около 20 + нетехнических менеджеров контента.

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

Все, что настроено с 1 голым репо на центральном сервере, где каждая среда является ветвью. Мы используем крюк post-receive с бездействующими сертификатами ssh, выполняющими автоматическое вытягивание соответствующего репо на основе case case, как показано ниже:

BRANCH=`echo $line |  sed 's/.*\///g'`
LOG="`date` - updating $BRANCH instance"
case $BRANCH in
  "beta" )
    ssh [email protected] "cd /var/www/beta.example.com; git pull"
    ;;