Как сказать TFS развернуть несколько веб-приложений, содержащихся в одном решении? - PullRequest
15 голосов
/ 23 июня 2011

У нас есть одно решение, которое содержит один проект веб-приложения и несколько сопутствующих проектов.Наш TFS 2010 каждую ночь создает это решение и развертывает веб-приложение на сервере IIS.Он работает как ветер.

На вкладке Процесс определения сборки TFS вы можете указать «Аргументы MSBuild».Это значение, которое установлено в нашем определении сборки (все в одной строке):

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:CreatePackageOnPublish=True 
/p:MSDeployPublishMethod=WMSVC
/p:MSDeployServiceUrl=<service url of IIS> 
/p:DeployIisAppPath="<a website>" 
/p:UserName=<domain>\<user 
/p:Password=<password> 

В этом сообщении блога объясняется вся установка: http://vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html.

Пока все хорошо.

Теперь мы добавили второй проект веб-приложения, который мы хотим развертывать также на одном и том же IIS каждую ночь.К сожалению, в этом случае настройка не применяется.TFS развертывает только одно веб-приложение.

Есть и другие с такой же проблемой:

TFS 2010 + MSDeploy, когда решение имеет несколько веб-приложений

и

WebDeploy для развертывания нескольких веб-сайтов

Вишал Р. Джоши предлагает добавить некоторые свойства в каждый проект веб-приложения.Теперь при сборке релиза будет создан веб-пакет (zip-файл) для каждого проекта веб-приложения, для которого определены следующие свойства:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DeployOnBuild>True</DeployOnBuild>
    <DeployTarget>Package</DeployTarget>
    <CreatePackageOnPublish>true</CreatePackageOnPublish>
</PropertyGroup>

Ok.Но как заставить TFS развернуть каждое веб-приложение в IIS?Есть другие идеи?

Ответы [ 4 ]

13 голосов
/ 02 августа 2011

Как Вишал описывает в статье блога, которую вы связали с собой, все параметры MSBuild можно перемещать внутри csproj. Это означает, что каждый проект может иметь свои собственные настройки.

У меня есть одно решение с 6 проектами, 4 библиотеками классов и 2 веб-приложениями (приложение WCF и MVC). Я следовал директиве из блога Вишала и просто переместил все мои параметры MSBuild в каждый файл csproj. Т.е.

  <PropertyGroup>
    <DeployOnBuild>True</DeployOnBuild>
    <DeployTarget>MsDeployPublish</DeployTarget>
    <CreatePackageOnPublish>True</CreatePackageOnPublish>
    <MSDeployPublishMethod>InProc</MSDeployPublishMethod>
    <MSDeployServiceUrl>localhost</MSDeployServiceUrl>
    <DeployIisAppPath>Dev.Auzzy\Web</DeployIisAppPath>
    <UserName>Username</UserName>
    <Password>Password</Password> 
    ...

Убедитесь, что вы удалили параметры из определения сборки.

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

Также стоит отметить, что вы не можете включить DeployIisAppPath в PropertyGroup, как указано выше, но использовать страницу свойств проекта, чтобы указать это для каждой конфигурации сборки. (Щелкните правой кнопкой мыши по каждому проекту> Свойства> Упаковать / опубликовать в Интернете).

5 голосов
/ 22 марта 2013

У меня ушло 2 дня на эту проблему.Я нашел чертовски простое решение, которое работает для меня.

Я создал еще 2 конфигурации с помощью диспетчера конфигураций решения с именем DeployMvc1, DeployMvc2. Снимите флажок для сборки проекта MVC2 в DeployMvc1 и снимите флажок для сборки проекта MVC1 в DeployMvc2 .

Затем я создал 2 определения сборок DeployMvc1Build и DeployMvc2Build.Первый слушает проект MVC1 с

/p:DeployObBuild=true
/p:Deploytarget=MsDeployPublish
/p:Configuration=DeployMvc1
/p:Platform="Any CPU"
/p:MSDeployPublishMethod=WMSvc
/p:MsDeployServiceUrl="https://{server1}:8172/MsDeploy.axd"
/p:DeployIisAppPath="mvc1"
/p:AllowUntrustedCertificate=True
/p:Username="{username}"
/p:Password={password}

Второй слушает проект MVC2 с

/p:DeployObBuild=true
/p:Deploytarget=MsDeployPublish
/p:Configuration=DeployMvc2
/p:Platform="Any CPU"
/p:MSDeployPublishMethod=WMSvc
/p:MsDeployServiceUrl="https://{server2}:8172/MsDeploy.axd"
/p:DeployIisAppPath="mvc2"
/p:AllowUntrustedCertificate=True
/p:Username="{username}"
/p:Password={password}

Тогда моя проблема решена.

1 голос
/ 14 февраля 2012

У меня похожая ситуация, когда у меня есть файл сборки TFSBuild.proj, и в конце сборки я генерирую несколько инсталляторов и пакетов, ориентируясь на каждую из сред развертывания: Разработка, Тестирование, Подготовка и Производство.Свойства, определенные в ответе @Matt Shepherd, также могут быть предоставлены непосредственно для задачи MSBuild вместо записи их в отдельные файлы проекта.

<!-- After build -->
<Target Name="AfterCompileSolution">

  <!-- Create SynchWorkflow deployment packages -->
  <CallTarget Targets="PackageSynchWorkflow" />

</Target>

<!-- Build deployment package for each target environment -->
<ItemGroup>
  <BuildMode Include="Development"/>
  <BuildMode Include="Test"/>
  <BuildMode Include="Staging"/>
  <BuildMode Include="Production"/>
</ItemGroup>
<PropertyGroup>
  <PackageLocation>$(OutDir)</PackageLocation>
</PropertyGroup>

<Target Name="PackageSynchWorkflow" Outputs="%(BuildMode.Identity)">
  <Message Text="Building %(BuildMode.Identity)"/>

  <MSBuild Projects="$(SolutionRoot)\SynchWorkflow\SynchWorkflow.csproj"
           Properties="Platform=Any CPU;
                       Configuration=%(BuildMode.Identity);
                       DeployOnBuild=true;
                       DeployTarget=Package;
                       DeployIisAppPath=Default Web Site/SynchWorkflow;
                       OutputPath=$(PackageLocation)\SynchWorkflow.%(BuildMode.Identity)Package;"/>
</Target>

В этом случае можно указать DeployIisAppPath и это значение будет записано в файл параметров пакета развертывания.

0 голосов
/ 24 июня 2011

Один из вариантов - записать это в задачу MSBuild. Таким образом, вы можете поддерживать несколько неограниченных развертываний веб-приложений в IE. Я еще не перенес наши существующие файлы proj, которые делают это, поэтому я не сталкивался с этой проблемой. Во всяком случае, вот статья, которая описывает этот процесс:

Статья

Надеюсь, что поможет

...