Как вы развертываете веб-сайт на своих веб-серверах? - PullRequest
14 голосов
/ 05 февраля 2009

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

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

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

  • Сервер разработчика с виртуальными каталогами, так что у каждого есть своя собственная кодовая база,
  • SVN (или любая другая VCS) для отслеживания изменений
  • центральный сервер для тестирования с последним проверенным кодом

Вопрос теперь: как нам удается развернуть измененные файлы на сервере без случайной загрузки ошибок из других проектов? Моя первая идея состояла в том, чтобы просто экспортировать последнюю версию из репозитория, но это не дало бы полного контроля над файлами.

Как вы справляетесь с такой ситуацией? Какие сценарии развертывания у вас есть в действии?

(В качестве особой проблемы: за последние 10 лет сайт органически вырос, поэтому проекты не разбиваются на небольшие куски, а файлы для одной конкретной функции распределены по всему дереву каталогов.)

Ответы [ 7 ]

10 голосов
/ 05 февраля 2009

Кэсси - вам, очевидно, предстоит пройти долгий путь, прежде чем вы полностью наладите управление исходным кодом, но, похоже, вы уже в пути!

Наличие отдельных песочниц определенно поможет. Затем убедитесь, что веб-сайт ВСЕГДА является чистой проверкой конкретной ревизии, тега или ветви из subversion.

Мы используем git, но у нас похожая настройка. Мы помечаем конкретную версию номером версии (в git мы также добавляем описание к тегу; хорошо для заметок о выпуске!), А затем у нас есть скрипт, который может запустить любой, имеющий доступ к «сделать выпуск», который занимает два параметры - какая система будет обновляться (центр обработки данных и, если мы обновляем тестовый или производственный сервер), а затем номер версии (тег).

Сценарий использует sudo для запуска сценария выпуска в общей учетной записи. Он проверяет соответствующую версию, минимизирует JavaScript и CSS 1 , передает код на соответствующие серверы для среды и затем перезапускает то, что необходимо перезапустить. Последняя строка сценария выпуска подключается к одному из веб-серверов и ведет журнал ошибок.

На наших веб-сайтах мы добавляем html-комментарий внизу каждой страницы с указанием текущего имени сервера и версии - что позволяет легко увидеть "Что работает сейчас?" «

1 и куча других домашних работ, подобных этому ...

2 голосов
/ 05 февраля 2009

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

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

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

1 голос
/ 05 февраля 2009

Естественно проверьте SVN для хранилища, Trac для отслеживания вещей и Apache Ant для развертывания.

Основным процессом является управление в Subversion, отслеживание репозиториев и разработчиков в Trac и использование сценариев развертывания Ant для продвижения вашего сайта с необходимыми настройками. Ant позволяет легко развернуть проект в определенном месте. (Dev / Test / Prod) и т. Д.

1 голос
/ 05 февраля 2009

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

Я думаю, что Phing можно использовать с CVS, но не с SVN (по крайней мере, то, что я прочитал в последний раз)

Есть также какой-то проект вокруг этого подражателя Capistrano, но написанный на PHP.

В противном случае есть также заказное решение:

  1. отметьте файлы, которые вы хотите развернуть.
  2. извлечение файлов с использованием тега в
    конкретный каталог
  3. символическая ссылка каталога на текущий корень документа (простой откат к предыдущая версия)
0 голосов
/ 05 февраля 2009

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

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

0 голосов
/ 05 февраля 2009

Мы проверяем стабильность с муравьем каждую ночь. И использовать муравей сценарий для развертывания. Это очень легко настроить и использовать.

0 голосов
/ 05 февраля 2009

Вам нужно посмотреть на:

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

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

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