MSDeploy все настройки [.config файлы] в одном пакете - PullRequest
6 голосов
/ 15 июня 2011

В настоящее время у нас есть 4 различных среды (Lab, Test, Stage, LIVE), и мы внедрили автоматическое развертывание с использованием Nant / CC.Net. Я изучаю и провожу некоторые исследования относительно того, что можно сделать более эффективно с помощью нового инструмента MSDeploy.

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

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

Какой лучший подход ты можешь придумать. МЫ НЕ ИСПОЛЬЗУЕМ TFS и не хотим, чтобы процесс автоматической сборки зависел от какого-либо процесса как такового, кроме MSDeploy или чего-то, что легко заменить. Думаю об использовании MSBuild тоже.

Ответы [ 3 ]

8 голосов
/ 20 июня 2011

Вы можете достичь этого, используя приведенное ниже решение. Между прочим, я получил руководство от одной из лучших книг, которые я читал в течение длительного времени. Книга «Внутри Microsoft Build Engine» написана Сайедом Ибрагимом Хашими и Уильямом Варфоломеем. Книга отлично прорабатывает детали.

Создайте файл msbuild proj, как показано ниже

<?xml version="1.0" encoding="utf-8"?>

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="TransformAll">

  <UsingTask TaskName="TransformXml"  AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

  <PropertyGroup>
    <DestDirectory>C:\Temp\DeployPackage\TRANSFORM_CONFIGS\</DestDirectory>
  </PropertyGroup>

  <ItemGroup>
    <TransformFiles Include="$(FilesToTransform)"/>
  </ItemGroup>

  <Target Name="TransformAll" DependsOnTargets="ValidateSettings">
    <MakeDir Directories="$(DestDirectory)"/>
    <TransformXml Source="..\web.config"
                  Transform="%(TransformFiles.Identity)"
                  Destination="@(TransformFiles->'$(DestDirectory)%(Filename).transformed.config')" />
  </Target>

  <Target Name="ValidateSettings">
    <Error Text="FilesToTransform cannot be empty"
           Condition=" '$(FilesToTransform)'=='' "/>
    <Error Text="Couldn't find transform file at [%(TransformFiles.Fullpath)]"
           Condition =" !Exists('%(TransformFiles.Fullpath)') "/>
  </Target>

</Project>

После добавления указанного выше файла proj и добавления файлов, относящихся к вашей среде, в папку, просто запустите приведенную ниже команду через доступную командную строку msbuild

msbuild transform.proj /t:TransformAll /p:FilesToTransform="Lab.config;Test.config;Live.config"

Надеюсь, это поможет. Не забудьте купить / обратиться к книге «Внутри Microsoft Build Engine».

0 голосов
/ 17 июня 2011

Я не уверен на 100%, что вы ищете.

Хотите ли вы иметь корневой конфигурационный файл, который обновляется из «мастер-файла», содержащего все специфические настройки среды?Вам следует взглянуть на XmlPreProcessor http://xmlpreprocess.sourceforge.net/

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

0 голосов
/ 16 июня 2011

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

...