развернуть сайт MVC с помощью msdeploy, включая параметры IIS, с сервера CI, для которого не настроена виртуальная папка

Я пытаюсь выяснить, как использовать msdeploy с моим сайтом MVC, чтобы иметь возможность автоматизировать развертывания, включая настройку IIS на удаленном сервере.

Я использую следующую команду для создания пакета:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe Clients\PokerLeagueWebSite\PokerLeagueWebSite.csproj /T:Package /p:Configuration=Deployment

Моя установка выглядит следующим образом:

local dev box using VS2010 + GIT
GITHUB for repo
Teamcity for CI server (different machine to dev box)
remote (same network) UAT server

Если я выберу «Включить параметры IIS, как настроено в IIS» и «Включить параметры пула приложений, используемые этим веб-проектом» и соберу пакет на моем устройстве dev, то опубликую его, он будет работать отлично. Вот команда, которую я использую:

C:\myproject\Packages\Deployment\PokerLeagueWebSite>PokerLeagueWebSite.deploy.cmd /Y /M:192.168.10.98:8172 /U:administrator /P:password

Это создает виртуальный каталог на моем UAT-сервере, и все хорошо. Проблема в том, что когда я фиксирую github, сервер CI загружает и собирает его. Естественно, виртуальный каталог не настроен на сервере CI, поэтому сборка / пакет завершается неудачно.

Я хочу использовать пакет, предоставляемый msdeploy, и иметь возможность удаленного развертывания сайта и IIS. Я думаю, есть несколько вариантов:

1) Измените файл проекта MVC на жесткие настройки кода iis, чтобы при запуске / компоновке пакета всегда создавались файлы XML с правильными настройками, чтобы его можно было развернуть с любого компьютера. Я думаю, что это можно сделать с помощью файла package.xml в корневом каталоге проекта, но я не знаю, как настроить все настройки пула приложений и виртуального каталога. Чувствую, что я на полпути, но не могу получить окончательный толчок через линию.

2) Используйте powershell для изменения созданных файлов пакета XML, чтобы добавить параметры извлечения IIS.

Первый вариант предпочтительнее, поскольку он хранит всю информацию в одном месте, и вам не нужно забывать запускать дополнительный сценарий перед развертыванием.

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

Нотабене

Читая некоторые из предложенных вопросов, прежде чем я разместил это, я вижу некоторые возможности:

MSdeploy развертывает приложение MVC 2 с неверным именем виртуального каталога

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

Похоже, эта ссылка продолжается с выше:http://msdn.microsoft.com/en-us/library/ee814764.aspx

На этой странице рассказывается о возможностях варианта 2.http://learn.iis.net/page.aspx/1082/web-deploy-parameterization/

Подумайте, вот как: используйте параметры.xml в корне сайта для материала проекта:http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html

РЕДАКТИРОВАТЬ

Я продолжал читать и тестировать вокруг этого. Используя файл parameters.xml в корневом каталоге проекта, я могу получить параметры там, я думаю. Моя проблема, кажется, файл archive.xml. Это довольно сильно отличается от того, что вызывает неправильную установку пакета, если у меня не установлен флажок использования параметров IIS. Я начал читать о файле [project] .wpp.targets, который может помочь, но чертовски потерян с этим банкоматом.

РЕДАКТИРОВАТЬ 2

Поэтому я думаю, что мне нужно получить файл [project] .sourcemanifest.xml, чтобы изменить некоторые из его настроек. Я считаю, что это то, что движет archive.xml, который сейчас отличается. Я думаю, что параметры.xml работает правильно, я думаю.

Когда НЕ используется IIS, sourcemanifest.xml выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <IisApp path="C:\hoh_code\GIT\ai-poker-project\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" managedRuntimeVersion="v4.0" />
  <setAcl path="C:\hoh_code\GIT\ai-poker-project\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="C:\hoh_code\GIT\ai-poker-    project\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp"     setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>

Но когда я отмечаю использование настроек IIS, это выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <appHostConfig path="Default Web Site/PokerLeague" />
  <contentPath path="C:\hoh_code\GIT\ai-poker-project\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" />
  <setAcl path="C:\hoh_code\GIT\ai-poker-project\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="C:\hoh_code\GIT\ai-poker-project\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>

Не уверен, как это изменить, работая над файлом [project] .wpp.targets, но шарить в темноте.

РЕДАКТИРОВАТЬ 3

Хорошо, так что я думал, что у меня это было на минуту. в моем файле [project] .wpp.targets у меня есть:

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

  <PropertyGroup>

    <AddContentPathToSourceManifestDependsOn>
      SetCustomACLs;
    </AddContentPathToSourceManifestDependsOn >
  </PropertyGroup>

  <Target Name="SetCustomACLs">
    <ItemGroup>
      <MsDeploySourceManifest Include="appHostConfig">
        <Path>Default Web Site/PokerLeague</Path>
      </MsDeploySourceManifest>
    </ItemGroup>
    <ItemGroup>
        <MsDeploySourceManifest Include="contentPath">
            <Path>$(_MSDeployDirPath_FullPath)</Path>
        </MsDeploySourceManifest>
    </ItemGroup>
  </Target>
</Project>

Который строит, создает пакет развертывания, который я могу затем развернуть с моего устройства разработки на сервер UAT, и он работает. Но когда я запускаю его на своем сервере CI, он не создает пакет развертывания, он выпадает на этапе манифеста с ошибкой:

One or more entries in the manifest 'sitemanifest' are not valid. 

Файл манифеста выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <appHostConfig path="Default Web Site/PokerLeague" />
  <contentPath path="C:\TeamCity\buildAgent\work\71e78d4c543e0594\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" />
  <IisApp path="C:\TeamCity\buildAgent\work\71e78d4c543e0594\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" managedRuntimeVersion="v4.0" />
  <setAcl path="C:\TeamCity\buildAgent\work\71e78d4c543e0594\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="C:\TeamCity\buildAgent\work\71e78d4c543e0594\Clients\PokerLeagueWebSite\obj\Deployment\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>

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

РЕДАКТИРОВАТЬ 4

ОК, поэтому я нашел параметр для удаления IISAPP из манифеста и параметров:

<DeployAsIisApp>False</DeployAsIisApp>

Это входит в файл wpp.targets.

Это теперь создало новую проблему, которая больше не будет развертываться. Я считаю, что это как-то связано с apphostconfig, работающим с сайтами, и iisapp, работающим с виртуальными каталогами.

РЕДАКТИРОВАТЬ 5

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

Исходные файлыifman.xml одинаковы systeminfo.xml одинаковы

setparameters.xml:

Раздел имени веб-приложения IIS отличается. В IIS версия имеет значение «Веб-сайт по умолчанию / pokerleague», а у моей - «C: \ sites \ pokerleague».

Я думаю, что именно это приводит к ошибке в файле parameters.xml:

веб-приложение IIS имеет те же значения, а атрибут tags имеет физический, а не iisapp.

Ответы на вопрос(2)

Ваш ответ на вопрос