MSDeploy все конфигурации [.config файлы] в одном пакете

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

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

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

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

3 ответа

Решение

Вы можете добиться этого, используя приведенное ниже решение. Между прочим, я получил руководство от одной из лучших книг, которые я читал в течение долгого времени. Книга "Внутри 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".

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

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

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

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

Другие вопросы по тегам