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