0

У нас есть решение с проектом веб-сайта, который размещен в среде с балансировкой нагрузки. В настоящий момент не используется CI, а развертывания выполняются вручную с использованием zip-файлов> _ <, однако я ищу его настройку и столкнулся с некоторыми трудностями. Для решения требуется папка App_Config, содержащая все конфигурации для сайта в корне, однако эти конфигурации отличаются от каждого из серверов хостинга, где один является сервером управления, а другой - сервером доставки.TeamCity MSBuild, удаленные папки во время развертывания

Конфигурации каждого отдельного сервера хранятся в отдельной папке в папке/Configs/servername /, содержащей файл web.config и папку App_Config. Они были скопированы вручную из этой папки в корневой каталог, чтобы перезаписать те, которые уже существуют. Также не требуется развернуть папку/Configs /.

Желательно, чтобы изменения в Visual Studio не требовались.

Можно ли автоматизировать это перед развертыванием в TeamCity?

С уважением

+0

Планируете ли вы использовать webdeploy для публикации своих сайтов? –

+0

Да, используя команду msbuild для развертывания. – Gralov

ответ

0

Вы можете задать свойства с различными значениями на основе имени компьютера. Это один трюк в торговле.

<Choose> 
    <When Condition=" '$(Computername)'=='MyManagementServer01' ">    
     <PropertyGroup> 
      <MyCustomProperty001>Red</MyCustomProperty001> 
      <MyCustomProperty002>Yellow</MyCustomProperty002> 
     </PropertyGroup> 
    </When> 

    <When Condition=" '$(Computername)'=='MyDeliveryServer01' "> 

     <PropertyGroup> 
      <MyCustomProperty001>Black</MyCustomProperty001> 
      <MyCustomProperty002>White</MyCustomProperty002> 
     </PropertyGroup> 

    </When> 

    <Otherwise> 

     <PropertyGroup> 
      <MyCustomProperty001>NoMatchMyCustomProperty001</MyCustomProperty001> 
      <MyCustomProperty002>NoMatchMyCustomProperty002</MyCustomProperty002> 
     </PropertyGroup>   

    </Otherwise> 

</Choose> 

Вы можете настроить свойство называется

<ConfigurationSourceFolder>/Configs/MyManagementServer01/</ConfigurationSourceFolder> 

Или настройки в "DeploymentType"

<DeploymentType>ManagementServerType</DeploymentType> 

Вы также можете поставить условия на "Цели" и даже задачи.

<MakeDir Directories="C:\MyCoolDirectory" Condition="('$(MyCustomProperty001)'!='')"/> 

////// Предпочтительно никаких изменений не должны быть сделаны для Visual Studio solution.//////

так вот наконечника «в-общем». Вместо того, чтобы размещать в файлах csproj обычное, иногда трудноизменяемое, использование базового файла .msbuild.

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="AllTargetsWrapped"> 
    <PropertyGroup> 
     <!-- Always declare some kind of "base directory" and then work off of that in the majority of cases --> 
     <WorkingCheckout>.</WorkingCheckout> 
    </PropertyGroup> 

    <Target Name="AllTargetsWrapped"> 

     <CallTarget Targets="BuildItUp" /> 

    </Target> 


    <Target Name="BuildItUp" > 
     <MSBuild Projects="$(WorkingCheckout)\MySolution.sln" Targets="Build" Properties="Configuration=$(Configuration)"> 
      <Output TaskParameter="TargetOutputs" ItemName="TargetOutputsItemName"/> 
     </MSBuild> 
     <Message Text="BuildItUp completed" /> 
    </Target> 

</Project> 
+0

Эти изменения сделаны в файле проекта для веб-сайта в моем визуальном студийном решении? Или как это работает? – Gralov

+0

Я бы создал базовый .msbuild (или .xml-файл), чтобы вызвать основную .sln-сборку. Позвольте мне добавить свой ответ. Базовый msbuild «владелец» послужит вам хорошим ИМХО. Дай мне секунду. – granadaCoder

+0

Поместите нижний код в файл под названием MySolution.msbuild. И тогда у вас есть TeamCity (или что-то вроде «обертки» CI). Как в «MsBuild.exe MySolution.msbuild» .. Что-то в этом роде. – granadaCoder

Смежные вопросы