Я пытаюсь выяснить, как использовать 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» и «Включить параметры пула приложений, используемые этим веб-проектом», и создатьпакет на моей коробке разработчика, а затем опубликовать оттуда он прекрасно работает.Вот команда, которую я использую:
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 для созданияпакет и получить настройки, которые мне нужны, затем запишите его, но я не имею ни малейшего понятия и потратил немало времени, читая об этом, но безуспешно, как бы я сделал вариант 1.
NB
Читая некоторые из предложенных вопросов, прежде чем я разместил это, я вижу некоторые возможности:
MSdeploy развертывает приложение MVC 2 с неправильным именем виртуального каталога
ЭтоВопрос говорит о передаче дополнительных значений в команде msdeploy, кажется, что все в порядке, но не является внутренним, так сказать, процессом сборки.Не уверен во всех командах, которые можно использовать, но могу гуглить, в этом я уверен.
Похоже, эта ссылка продолжается с вышеприведенным: http://msdn.microsoft.com/en-us/library/ee814764.aspx
На этой странице рассказывается о возможностях варианта 2.http://learn.iis.net/page.aspx/1082/web-deploy-parameterization/
Подумайте, вот как: используйте файл settings.xml в корне сайта для материалов проекта: http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html
РЕДАКТИРОВАТЬ
Я продолжил читать и тестировать вокруг этого.Используя файл parameters.xml в корневом каталоге проекта, я могу получить параметры там, я думаю.Моя проблема, кажется, файл archive.xml.Это довольно сильно отличается от того, что вызывает неправильную установку пакета, если у меня не установлен флажок использования параметров IIS.Я начал читать о файле [project] .wpp.targets, который может помочь, но чертовски потерян с этим банкоматом.
EDIT 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 и моим обычным.
файлы sourcemanifest.xml совпадают
systeminfo.xml одинаковы
setparameters.xml:
Раздел имени веб-приложения IIS отличается. В IIS версия имеет значение «Веб-сайт по умолчанию / pokerleague», а у моей - «C: \ sites \ pokerleague».
Я думаю, что именно это приводит к ошибке в settings.xml:
веб-приложение IIS имеет те же значения, а атрибут теги имеет физический, а не iisapp.