Архитектура репозитория Subversion для отдельных сред Dev/Test/Prod
Мне было поручено создать систему subversion для сред dev/test/prod, и мне было интересно, есть ли у кого-нибудь опыт работы с подобной средой или предложениями.
Мы строим и настраиваем ряд систем, которые представляют собой комбинацию сценариев и сложных файлов конфигурации для сторонних продуктов. Из-за этого невозможно реструктурировать компоновку файлов конфигурации и путей, потому что мы не контролируем системный код сторонних производителей (то есть, если система хочет файл конфигурации в определенном месте, вот где это должно быть).
Мы работаем с методологией dev/test/prod, но она немного сложнее. Существует полная физическая среда для каждого этапа. В связи с этим на каждом этапе необходимо внести некоторые изменения, чтобы он работал в этой среде. Вся разработка должна происходить на сервере разработки, тестирование на тестовом сервере, после чего у нас есть производственные серверы.
При такой настройке невозможно извлечь копию проекта на свою рабочую станцию, внести некоторые изменения, протестировать их и зафиксировать их обратно. Этот материал будет работать только на сервере dev/test/prod (т.е. он привязан к конкретным именам хостов и диапазонам IP-адресов).
Итак, на мой взгляд, есть 2 варианта:
Опция 1
Сделайте нормальную структуру ствола / веток / меток. Затем создайте сценарий как часть сборки, который внесет все изменения, специфичные для сред dev/test/prod.
Например, вы должны передать весь код в ствол как обычно, а затем, когда вы довольны им, скопировать его в тег выпуска. Затем в тестовой среде вы проверяете последний тег. Это включает в себя сценарий "установки".
Затем скрипт запускается вручную (или через SVN-хук), и он обнаружит, что вы находитесь на тестовом сервере, и внесет соответствующие изменения.
Проблема с этим способом состоит в том, что svn diffs и т. Д. Будут показывать изменения в файлах, которые получают изменения. Преимущество в том, что это (довольно) просто.
Вариант 2
Создайте ветки test / prod и ствол в качестве разработки:
project
trunk
branches
test
prod
tags
v1.0
v1.1
Идея в том, что сервер разработки указывает на trunk
, Когда мы довольны изменениями, мы делаем новый тег. Затем мы объединяем его в branches/test
, В нем уже будут изменения, необходимые для работы на тестовом сервере. Затем мы делаем то же самое для prod, когда тестирование завершено.
Из того, что я вижу, преимущество этого подхода состоит в том, что нет необходимости в причудливых сценариях ловушек, и у нас могут быть более сложные различия между dev / test и dev / prod, которые SVN сможет лучше обрабатывать путем слияния?
Просто ищем какой-то вклад, предложения, опыт и т. Д. Мы привязаны к Subversion, и дополнительные инструменты, к сожалению, не нужны.
Спасибо (извините за длину)!
2 ответа
Вариант 2 кажется хорошей архитектурой. Занимался поиском и обсуждением с другими разработчиками.
Честно говоря, я думаю, что любой вариант является вполне жизнеспособным.
Тем не менее, я немного предпочитаю ваш первый выбор, причина в том, что как только вы начнете получать "известные различия" между определенными ветвями, вы должны начать использовать силу мозга, чтобы выработать "это различие между тестом и продуктом, которое должно быть там?"
С опцией 1 вы всегда определенно работаете и строите одну и ту же ветку, один и тот же код, так что вы просто не получите ничего подобного. Каждый раз, когда кто-либо вносит изменение, он сразу же видит (если захочет), будет ли это влиять на конкретные среды до того, как они сливаются с ним.
Так что это в основном аргумент, чтобы все было просто. Это тот же аргумент, если вы маркируете свое программное обеспечение в соответствии с вашим клиентом. Любой метод жизнеспособен, но я склоняюсь к варианту 1.