2009-06-24 2 views
4

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

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

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

Любые предложения?

+1

Я попробовал несколько предложений ниже, включая Capistrano и CruiseControl, и проверил SpringLoops (действительно крутое решение, но это не сработает для нас). PHP Phing оказался идеальным. Легко настраивать и настраивать. – prime31

ответ

0

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

+0

Мы используем собственный сервер приложений как промежуточное программное обеспечение, которое находится между нашими SQL-серверами (MYSQL и MSSQL) и сервером базы данных клиентов, поэтому наши данные уже обработаны. – prime31

+0

Jas означает, что изменения в базе данных (или данные в вашей базе данных) нельзя отменить с помощью команды revert. Наличие функционального веб-приложения = базы данных + кода, работающих вместе. Возврат функционального кода (ранее) может не работать, если в вашей базе данных есть другая схема. – Ted

0

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

+0

phing выглядит довольно многообещающе ... – prime31

0

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

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

2

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

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

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

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

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

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

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

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

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

1

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

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

2

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

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

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

0

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

Смежные вопросы