TeamCity - проблема с публикацией на сайте ASP.net - PullRequest
13 голосов
/ 05 января 2010

Я пытаюсь настроить TeamCity 5.0 для запуска цели «Опубликовать» в одном из моих проектов.

Когда я загружаю решение в VS 2008 и нажимаю «Опубликовать» в проекте, веб-сайт создается правильно - файлы на сервере появляются сами по себе и т. Д. Однако, когда я запускаю файл sln через запуск TeamCity Sln2008, TeamCity возвращает:

[Project "Portal.csproj" (Опубликовать цели):] Пропуск неопубликованного проекта.

У кого-нибудь была такая же проблема?

Filip

Ответы [ 7 ]

4 голосов
/ 04 июля 2010

Вы можете создать свой собственный простой файл сборки. Например:

<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

    <PropertyGroup>
        <PackageFolder>C:\Builds\AppServer\Actual</PackageFolder>
    </PropertyGroup>

    <Target Name="Build" DependsOnTargets="BeforeBuild">
        <MSBuild Projects="TeamWork-AppServer.sln"
                 Targets="Rebuild"
                 Properties="Configuration=Debug;OutDir=$(PackageFolder)\;"></MSBuild>
    </Target>
</Project>

Или вы можете использовать VS 2008 Web Deployment Project. Вот отличный турториал .

3 голосов
/ 24 августа 2010

Вот как я изменил файл .csproj для проекта ASP.NET MVC для развертывания через TeamCity 5.1.2. В файле .csproj замените цель AfterBuild на этот XML (если в существующей AfterBuild уже есть команды, вам придется объединить их с этими целями):

<PropertyGroup>
    <DeployTarget>0</DeployTarget>
    <PublishTarget>0</PublishTarget>
    <PublishFolder>..\Deployment\YourWebsiteName</PublishFolder>
</PropertyGroup>
<Target Name="PublishProperties">
    <CreateProperty Value="$(PublishFolder)">
    <Output TaskParameter="Value" PropertyName="WebProjectOutputDir"/>
    </CreateProperty>
    <CreateProperty Value="$(PublishFolder)\bin\">
    <Output TaskParameter="Value" PropertyName="OutDir"/>
    </CreateProperty>
</Target>
<Target Name="WebPublish" DependsOnTargets="BeforeBuild;PublishProperties">
    <RemoveDir Directories="$(PublishFolder)"
            ContinueOnError="true" />
    <CallTarget Targets="ResolveReferences;_CopyWebApplication" />
</Target>
<Target Name="Deploy" DependsOnTargets="WebPublish">
    <CreateProperty Value="Path\To\Your\Server" Condition="$(DeployFolder) == ''">
    <Output TaskParameter="Value" PropertyName="DeployFolder"/>
    </CreateProperty>
    <RemoveDir Directories="$(DeployFolder)" Condition="$(CleanDeploy) == 1" />
    <ItemGroup>
    <DeploymentFiles Include="$(PublishFolder)\**\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(DeploymentFiles)"
        DestinationFolder="$(DeployFolder)\%(RecursiveDir)" />
</Target>
<Target Name="AfterBuild">
    <CallTarget Targets="WebPublish" Condition="$(PublishTarget) == 1" />
    <CallTarget Targets="Deploy" Condition="$(DeployTarget) == 1" />
</Target>

В этом сценарии используются свойства $ (PublishTarget) и $ (DeployTarget) для запуска дополнительных шагов после сборки проекта. Группа PropertyGroup в начале устанавливает значения по умолчанию равными 0, поэтому дополнительные цели не выполняются. Вы можете переопределить настройки по умолчанию в TeamCity, перейдя на страницу «Свойства и переменные среды» своей конфигурации сборки и добавив имена системных свойств «PublishTarget» и «DeployTarget» и установив их значение равным 1.

Цель публикации содержит большую часть магии. Это делает вызов цели Visual Studio _CopyWebApplication для вывода веб-сайта в PublishFolder. По умолчанию папкой публикации является «.. \ Deployment \ YourWebsiteName» относительно файла проекта, но это также можно переопределить с помощью системного свойства. Цель Deploy принимает файлы, выведенные целью публикации, и копирует их в DeployFolder. Для DeployFolder можно задать системное свойство в TeamCity или заменить путь «Путь \ К \ Вашему \ Серверу» в цели «Развертывание».

Вы также можете пропустить дополнительный шаг развертывания, просто установив PublishFolder в любое место назначения развертывания. Этот сценарий зависит от файлов «Microsoft.WebApplication.Build.Tasks.Dll» и «Microsoft.WebApplication.targets», установленных Visual Studio, но вы можете просто скопировать файлы с рабочей станции разработчика на сервер сборки. Расположение по умолчанию: «C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications».

3 голосов
/ 08 июля 2010

Если это веб-проект, вы можете использовать Microsoft.WebApplication.targets. Если вы не установили Windows SDK на агент сборки, вам нужно будет скопировать файл целей в ваш источник управления и сослаться на него из вашего веб-проекта, добавив:

<Import Project="{path to your tools}\Microsoft.WebApplication.targets" />

Вы можете найти файл целей здесь (в зависимости от вашей ОС):

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications

Теперь вам просто нужно обновить задачу msbuild для ссылки на правильные цели:

<MSBuild Projects="{path to your web project file}"
         Targets="Build;ResolveReferences;_CopyWebApplication"
         Properties="Configuration=Release;Architecture=Any;WebProjectOutputDir={your web root};OutDir={your web root}\bin\" />
2 голосов
/ 04 июля 2010

Вы пытались запустить Visual Studio напрямую, а не полагаться на MSBuild для прямой публикации проекта. MSBuild не может выполнять определенные виды проектов. У меня была похожая проблема с созданием MSI из Team City. Я предпочитаю точные настройки командной строки, поскольку я не знаю ваших точных настроек.

<PropertyGroup>    
    <buildconfiguration>Release</buildconfiguration>
    <DevEnv>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com</DevEnv>
</PropertyGroup>
<Exec Command="%22$(DevEnv)%22  /build $(buildconfiguration) $(teamcity_build_checkoutDir)\Test.sln /project Test.UI.Web.csproj"/>

Если вы используете бегунок решений Team City в качестве сборщика, вам придется переключиться на MSBuild.

Если вы хотите остаться с бегуном Team City, вы всегда можете попробовать добавить проект к вашему решению, который будет построен последним (или сделать это в проекте, который в данный момент создается последним), и создать его обмануть как командную строку после сборки проекта.

2 голосов
/ 03 июля 2010

У меня такая же проблема, вот что я пробовал:

У меня есть файл решения в Visual Studio 2010, добавленный в репозиторий Mercurial.

Я настроил FTP-сервер для публикации в корневом каталоге сайта, и публикация из Visual Studio 2010 локально работает хорошо, он подключается и загружает все как положено, и веб-сайт работает.

Теперь я хотел автоматизировать это при каждом отправке в центральный репозиторий Mercurial, и, поскольку я использую TeamCity, я обнаружил, что поле для указания цели сборки, обычно «Перестройка», также может принимать «Опубликовать» , поэтому я указал «Перестроить; Опубликовать» в соответствии с документацией и справкой.

Я подтвердил, что после публикации в Visual Studio и фиксации новых файлов, файл с именем ProjectName.Publish.xml сопровождает мой файл ProjectName.csproj, и этот файл загружается в каталог сервера при сборке TeamCity.

Тем не менее, публикация не производится, и когда я проверяю журнал сборки, он говорит:

[19:01:02]: [Project "Test.sln" (Rebuild;Publish target(s)):] Project "Test.UI.Web.csproj" (Publish target(s)):
[19:01:02]: [Project "Test.UI.Web.csproj" (Publish target(s)):] Skipping unpublishable project.

Именно так, как здесь говорится.

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

Примечание: мне все равно, каким образом файлы публикуются, мне просто нужен один шаг сборки TeamCity, чтобы на самом деле это сделать, поэтому, если у кого-нибудь есть решение, подобное MSBuild, которое просто обходит TeamCity, будет удовлетворен

1 голос
/ 10 декабря 2010

Для тех, кто использует проекты веб-приложений в VS2010, мне удалось заставить TeamCity упаковать результаты, а затем развернуть пакет через Web после успешного построения решения.
С небольшой настройкой это имело тот же эффект, что и нажатие кнопки «Опубликовать» в VS.

Мое решение имеет несколько проектов, один из которых - проект веб-приложения ASP.NET MVC. Я создаю решение, упаковываю проект веб-приложения и запускаю его в 3 этапа. Я не нашел (лучше | короче | проще | более элегантно) способ сделать это.

У меня не установлен VS на моем сервере TeamCity, поэтому мне нужно было получить оба файла: C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web и C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Веб-приложения и разместите их в одном месте на сервере TeamCity (второе зависит от первого). Если вы работаете с машинами x / x64, я бы взял их как из Program Files (x86), так и из Program Files. Вам также необходимо установить Web Deploy на вашем компьютере и (я полагаю) Службу управления IIS (т.е. что-то прослушивающее https://yourservername:8172/MsDeploy.axd)

).

Есть 3 шага сборки:

  1. Visusal Studio (sln) , Цель = Перестроить, Конфигурация = Отладка
  2. MSBuild WebProject.csproj, Цели = Пакет Командная строка = / p: PackageLocation =% teamcity.build.checkoutDir% \ Debug.zip / p: Конфигурация = отладка
  3. Командная строка , Исполняемый файл =% teamcity.build.checkoutDir% \ Debug.deploy.cmd, Параметры = / Y "-setParam: 'Имя веб-приложения IIS' = 'Веб-сайт по умолчанию / PreCreatedAppInIis'"

На последнем шаге «Имя веб-приложения IIS» - это фактическое имя параметра, не меняйте его. Это может быть что-то вроде «Веб-сайт по умолчанию» или как вы назвали свой веб-сайт в IIS, и / или это может быть путь приложения IIS под ним. Если приложение не существует, вы можете столкнуться с ошибками из-за неправильной настройки пула приложений для размещения приложения. Вместо того, чтобы исследовать это, я просто создал приложение в соответствующем пуле приложений. В моем случае я нацелился на ASP.NET 4.0 x64, где пул приложений по умолчанию - ASP.NET 2.0 x64.

1 голос
/ 06 июля 2010

Может ли TeamCity опубликовать веб-проект с помощью средства запуска sln2008 Может ли TeamCity опубликовать веб-проект с помощью сборщика sln2008?

Какой тип проекта вы пытаетесь опубликовать?

http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/7ec0d942-6354-41c3-9c97-7e7d1f461c29 Принято сверху ссылка:

   What I discovered is that "Shared-addins" are not publishable 
and are distinct and different from document and application level 
VSTO addins, which are deployable.
    When I rebuilt my application as an application level 
VSTO addin, the publish option was available.

http://www.automise.com/Default.aspx?tabid=53&aft=9813 Ссылка взята сверху:

      Assuming you're using Visual Studio 2008, we're unable to execute the web site 
    publish feature from FinalBuilder as it's partially implemented by the VS IDE. 
    You'll need to use to the MSBuild action to compile the application and then 
    use one of the other actions (FTP, File Copy, etc) in FinalBuilder to perform 
    the deployment. Visual Studio 2010 has fixed this problem by performing the 
    entire publish using MSBuild, see this post for more info: 
http://www.finalbuilder.com/forums....&afv=topic 

Две темы, которые могут помочь

http://devnet.jetbrains.net/thread/280420;jsessionid=5E8948AE810FFFF251996D85E7EB3FE3

Visual Studio. Опубликовать проект из командной строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...