Решение для разработки и развертывания сайтов SVN

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

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

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

Какие-либо предложения

 prime3109 июл. 2009 г., 19:50
Я попробовал несколько из приведенных ниже предложений, включая Capistrano и CruiseControl, и проверил SpringLoops (действительно классное решение, но оно у нас не сработает). PHP Phing оказался идеальным партнером. Его очень легко настроить и настроить.

Ответы на вопрос(7)

Phing или даже решение CI, как Xinc или PhpUnderControl?

 prime3125 июн. 2009 г., 00:38
phing выглядит многообещающе ...

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

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

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

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

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

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

 prime3124 июн. 2009 г., 22:50
Мы используем пользовательский сервер приложений в качестве промежуточного программного обеспечения, которое находится между нашими серверами SQL (MYSQL и MSSQL) и сервером базы данных клиентов, поэтому наши данные уже обработаны.
 Ted03 дек. 2010 г., 17:24
Jas означает, что изменения в вашей базе данных (или данных в вашей базе данных) не могут быть отменены с помощью команды возврата. Наличие функционального веб-приложения = база данных + код, работающий вместе. Возвращение к (ранее) функциональному коду может не сработать, если ваша база данных имеет другую схему.

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

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

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

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

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

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

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

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

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

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

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

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

Ваш ответ на вопрос