Развертывание PHP с использованием Git. Как я могу сделать это более автоматизированным? - PullRequest
15 голосов
/ 20 апреля 2011

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

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

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

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

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

Затем через SSH на живом сервере я выполняю короткий bash-скрипт, который в основном клонирует репозиторий из живого репо в папку, которую будет обслуживать Apache.

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

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

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

Ответы [ 4 ]

2 голосов
/ 20 апреля 2011

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

Другое решение состоит в том, чтобы иметь планировщик (как упомянуто Гудзоном в pderaaij ' answer , чтобы:

  • отслеживать репозитарий заявлений и, на правой метке, запускать push на живом сервере
  • следить за живым репо и запускать скрипт ssh.

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

2 голосов
/ 21 апреля 2011

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

1 голос
/ 21 апреля 2011

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

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

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

BRANCH=`echo $line |  sed 's/.*\///g'`
LOG="`date` - updating $BRANCH instance"
case $BRANCH in
  "beta" )
    ssh www-data@beta "cd /var/www/beta.example.com; git pull"
    ;;
1 голос
/ 20 апреля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...