Контролируемая версия производственной среды - PullRequest
2 голосов
/ 05 ноября 2008

У меня вопрос, как мне правильно контролировать версию рабочей среды?

Это наша текущая среда:

  • (Внутренний сервер) Разработка - Исходный код с управлением версиями
  • (Клиентский сервер) Среда приемочных испытаний
  • (Клиентский сервер) Промежуточная среда
  • (Клиентский сервер) Производственная среда

Когда мы выпускаем новую функциональность для приемочного тестирования, мы публикуем в Visual Studio, архивируем изменения и применяем их на тестовом сервере. Там мы создаем резервную копию папки (чтобы мы могли отменить изменения) и создаем папку выпуска, чтобы мы могли переместить эти изменения в промежуточную, когда они будут утверждены.

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


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

Когда функциональность должна быть перемещена из Test в Staging, мы экспортируем изменения, сделанные с момента последнего обновления среды Staging, и копируем их в приложение Staging. Там мы делаем коммит, который позже можно извлечь для выпуска в производственную среду.

Недостатки этого метода в том, что использование subversion загромождает приложение этими каталогами .svn. Это может быть исправлено путем запрета доступа к этим каталогам в IIS или web.config. Другим решением было бы использование Git в каталоге над корневым каталогом приложения. Но с Git труднее работать неопытному разработчику в среде Windows.

У кого-нибудь есть опыт решения этой проблемы? Как вы управляете версией вашей производственной среды? Что если вам нужно отменить выпуск, у вас есть папка резервной копии, созданная до выпуска?

Я обсуждал это с нашими разработчиками, и они не видят никаких проблем с использованием Subversion для управления версиями и резервного копирования среды тестирования / подготовки / производства. Наоборот, они были бы рады не создавать папки выпуска / резервного копирования каждый раз, когда им нужно было выпустить новые функции.

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

Если у вас есть опыт такого сценария, я был бы рад услышать об этом.

Микаэль Лундин

Ответы [ 4 ]

2 голосов
/ 05 ноября 2008

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

Затем можно развернуть упакованную сборку в других средах. Таким образом, вам не нужно создавать резервные копии версий, потому что у вас уже есть все встроенные версии в вашем основном хранилище. Если вы убедитесь, что развертывание полностью автоматизировано и может быть выполнено одной командой (powershell?), Вам больше не нужно хранить резервные копии на серверах.

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

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

Мы используем Subversion как способ развертывания вещей на наших разных серверах (prod, demo, dev и т. Д.) И не столкнулись с какими-либо трудностями. Единственные вещи, на которые стоит обратить внимание, это различия в базе данных и различия в конфигурационных файлах. Конфигурационные файлы могут быть шаблонизированы, чтобы не перезаписывать файлы в каждом отдельном развертывании, но тогда вы не получите те версии для изменений для этой конкретной платформы.

С системой такого типа вы можете использовать теги Subversion для простого обновления / отката к определенным версиям развертывания.

1 голос
/ 05 ноября 2008

Я использовал mercurial (Hg) в качестве системы управления производственной версией. (Не код, а фактически развернутые двоичные файлы). Это работает довольно хорошо. Subversion не совсем подходит для использования в моем сценарии, потому что я хочу иметь возможность синхронизировать производственные изменения (например, файлы конфигурации) с тестированием и, возможно, даже с разработкой. Subversion сложнее синхронизировать / объединять между различными репозиториями (много ручного копирования). А с тегом hg и обновлением hg можно легко вернуться к стабильному (или нестабильному) тегу.

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

0 голосов
/ 11 ноября 2008

Спасибо за ваши ответы и предложения.

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

@ Jonke Я посмотрю на Mercurial. Возможно, производственная среда с управлением версиями является излишней, если у вас есть система сборки, в которой каждая ревизия имеет управляемый версией исходный код. Но я все же хотел бы иметь быстрый способ отменить изменения в предыдущей версии, если что-то пойдет не так во время развертывания новой функциональности. Мне также нравится, как вы получаете файлы конфигурации с управлением версиями на сервере, поскольку производственная среда всегда отличается от среды разработки.

Может быть, я ищу серебряную пулю :) 1007 *

...