Решение для разработки и развертывания сайтов SVN - PullRequest
4 голосов
/ 24 июня 2009

Вот ситуация: у нас есть несколько разработчиков с различной степенью опыта командной строки, и мы собираем решение для развертывания для наших веб-сайтов. Производственная среда - 2 SUSE Linux. Среда разработки также представляет собой SUSE Linux. Каждый разработчик имеет / будет иметь копию дерева SVN в своем домашнем каталоге для разработки и тестирования.

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

Наше текущее решение по развертыванию немного неуклюжее, его довольно сложно вернуть назад и медленно, как грязь. В настоящее время мы проверяем все файлы, используя SVN. Затем запускается скрипт, который по существу создает тег в SVN. Затем запускается второй скрипт, который переходит на каждый из 2 производственных серверов и запускает команду svn up.

Есть предложения?

Ответы [ 7 ]

2 голосов
/ 27 июня 2009

Capistrano - отличное решение. Хотя изначально он был разработан для платформы Ruby on Rails, я успешно использовал его в ряде проектов PHP. Автоматизирует действия, выполняемые через SSH. Развертывания являются атомарными, поскольку каждое развертывание извлекается в новый каталог.

Текущая копия включается с помощью символической ссылки. Последняя версия исходного кода взята из Subversion. Вы также можете настроить файлы статической конфигурации для использования в производственной среде.

Capistrano также поддерживает откаты, хотя здесь следует соблюдать осторожность, если вы вносите изменения в базу данных между развертываниями. Чтобы решить эту проблему, используйте что-то вроде dbdeploy или rails migrations .

2 голосов
/ 24 июня 2009

Я парень .net и поэтому работаю с вещами в мире Windows ... сказав, что технологии, с которыми я ежедневно работаю для управления процессами сборки, пришли из вашего мира! (Технологии Linux / java указаны в скобках, но я также включил их эквивалент для программ чтения с Windows). Я использую CruiseControl.NET ( CruiseControl ), VisualSVN ( SVN ), Черепаха и NAnt ( Ant ), чтобы позаботиться обо всех моих потребностях в сборке.

Все мои сборки обычно автоматически выдвигаются и помечаются во время регистрации. Это делается с помощью CruiseControl, поскольку он контролирует мой источник контроля (SVN или SubVersion). Когда CruiseControl (CC) увидит, что новый код был зарегистрирован, он выполнит проект CC, который в свою очередь вызывает скрипт Ant на сервере сборки.

Скрипт Ant делает несколько вещей для меня в общей сборке. Он проверит копию последнего кода и отправит ее на сервер сборки. Затем он соберет код, чтобы убедиться, что все по крайней мере компилируется. Затем он устанавливает чистую копию моей базы данных и выполняет любые сценарии sql для построения этой базовой базы данных до текущей версии. Затем я запускаю все свои проекты модульных тестов. Затем я запускаю интеграционные тесты, которые, помимо прочего, проверяют мой уровень репозитория, чтобы убедиться, что код по-прежнему выровнен с моей серверной частью (я обычно использую ORM в своих проектах, поэтому они редко не синхронизированы ... но это хороший шаг в процессе). После того, как все тесты пройдены (или не пройдены), я возвращаю базу данных в чистое состояние и выполняю сценарии, чтобы привести ее к текущей версии (это важно, так как она предоставляет команде чистую базу данных для разработки по щелчку мыши). кнопки). Если сборка прошла успешно, я разверну код на сервере разработки (у меня также есть развертывание одним щелчком на промежуточных и рабочих серверах). Если вы хотите пометить свою базу кода при каждой регистрации, вы можете сделать это и здесь.

Как только все это будет выполнено, я хотел бы провести некоторый анализ моего кода, используя NDepend , NDoc и NCover . NDepend - это инструмент для анализа кода, который позволяет убедиться, что все правильно с точки зрения архитектуры, что стандарты именования являются такими, какими они должны быть, и ОЧЕНЬ БОЛЬШЕ. NDoc извлекает все комментарии кода и создает документацию в стиле MSDN для моего кода. NCover сообщает мне, правильно ли я выполняю модульные тесты для своего кода.

Затем у меня есть специальная задача Ant, которую я написал, которая анализирует весь мой код для различных тегов // TODO и // CodeDebt, чтобы сгенерировать еще один отчет, чтобы сообщить мне (обычно в конце спринта), насколько дерьмо накапливается в моей базе кода. Это может быть учтено в следующем спринте.

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

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

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

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

1 голос
/ 26 июня 2009

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

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

0 голосов
/ 02 марта 2013

Могу ли я предположить, что если вы развертываете файлы на своих производственных серверах, то puppet является отличным инструментом для управления обеими конфигурациями и может также использоваться для развертывания вашего контента из subversion (или git). Найти куклу и модуль vcsdeploy http://www.practicalclouds.com/content/guide/pclouds-vcsdeploy-deploy-stuff в кузнице кукол.

0 голосов
/ 24 июня 2009

По моему опыту, функцию «отменить» практически невозможно поддерживать, поскольку нет простого способа обработки разрушительных обновлений. Тем не менее, вы можете определенно сделать лучше, чем просто svn up. По крайней мере, вы захотите запустить скрипт после проверки кода, который может исправить приложение (внести изменения в базу данных и т. Д.). Возможно, вы захотите сделать фактическое обновление также атомарным, поэтому я бы порекомендовал вам svn export во временную папку, а затем обновите символическую ссылку, чтобы она указала на папку, когда вы закончите. Возможно, вы захотите остановить любые службы также во время работы с патчами.

Вы можете использовать что-то вроде Capistrano для упаковки всего этого в хорошую упаковку. Он поставляется с симпатичным графическим интерфейсом (Webistrano).

0 голосов
/ 24 июня 2009

Вы смотрели на существующие инструменты сборки, такие как ant / phing или даже на решение CI, например xinc или phpUnderControl ?

0 голосов
/ 24 июня 2009

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

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