Как MSDeploy встроенный пакет веб-сайта для девственного веб-сайта IIS

Я пытаюсь автоматизировать процесс сборки/развертывания.

До сих пор я использую:

  • решение Visual Studio 2010 с основным проектом Веб-приложение (и зависимыми проектами)
  • MSBuild
  • MSDeploy
  • CruiseControl.Net

Итак, после долгих споров и скрежещения зубов, у меня теперь CCNet стартует MSBuild script для сборки, упаковки и развертывания веб-сайта. MSBuild script находится ниже:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.sln"
                    Targets="Clean;Rebuild"
                    Properties="Configuration=$(Configuration)"
    />
</Target>

<!--<Target Name="Test" DependsOnTargets="Build">
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.Web.Tests\Product.Web.Tests.csproj"
                    Properties="Configuration=$(Configuration);OutputPath=$(CCNetArtifactDirectory)\Tests\" />
    <Exec Command="$(MSTestPath) /testcontainer:$(CCNetArtifactDirectory)\Tests\Product.Web.Tests.dll /runconfig:$(CCNetWorkingDirectory)\src\Local.testsettings" ContinueOnError="false" />
</Target>-->

<Target Name="Package" DependsOnTargets="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.Web\Product.Web.csproj"
                    Targets="Package"
                    Properties="Configuration=$(Configuration);PackageLocation=$(PackageDir)\Product.zip"
    />
</Target>

<Target Name="Deploy" DependsOnTargets="Package">
    <Exec Command="&quot;$(MSDeployPath)&quot; -source:package='$(PackageDir)\Product.zip' -dest:auto,computerName='$(MSDeployComputerName)',includeAcls='False' -verb:sync -setParamFile:$(PackageDir)\Product.SetParameters.xml" ContinueOnError="false" />
</Target>

Все это работает отлично, пока на целевой машине уже есть веб-сайт, настроенный в IIS. Это не обязательно быть существующим "реальным" сайтом (это может быть просто оболочка).

Хотя это здорово, я действительно хочу, чтобы MSDeploy автоматически создавал веб-сайт, поскольку, похоже, он может работать с веб-приложением. Это возможно? И если так, то любая помощь будет принята с благодарностью!

Ответ 1

Довольно уверен, что MSDeploy не может этого сделать. Одна вещь, которую я делал в прошлом, - это вызов приложения appcmd.exe из Exec для срыва/создания нового веб-сайта. Задачи сообщества MSBuild имеют некоторые возможности веб-сайта, а также MSBuild Расширение > .

Ответ 2

У MSDeploy есть возможность, вам просто нужно подключить нужного провайдера.

Например, вы используете провайдера auto в своем пункте назначения, который в основном говорит, что пункт назначения будет таким же, как (или совместимым с) источником, который вы настраиваете как пакет. Поскольку пакет не определяет свою среду хостинга, msdeploy не собирается пытаться что-либо с этим делать, он просто собирается скопировать файлы из пакета в основном.

Вы вызываете auto in ( "-dest: auto" ):

-dest:auto,computerName='$(MSDeployComputerName)'

Чтобы создать msdeploy для создания сайта, вам нужно использовать более конкретного провайдера, который понимает понятия "сайт" и "приложение" и как они могут использовать пакет в качестве содержимого элемента веб-сайта.

Я не сделал этого через некоторое время, поэтому не хочу излагать специфику (поскольку я опробую, что вы ошибаетесь), но посмотрите на документ MSDN на поставщиках msdeploy.

Посмотрите на авто, текущую настройку. Затем взгляните на iisApp и appHostconfig.

http://technet.microsoft.com/en-us/library/dd569040(WS.10).aspx

Я считаю, что один из этих 2 создаст для вас сайт/приложение, если он будет использован правильно, и даст вам результат, который вам нужен.