развернуть сайт 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.