TeamCity - проблема с публикацией на сайте ASP.net

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

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

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

У кого-то была такая же проблема?

Filip

Ответы

Ответ 1

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

<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. Вот отличный turtorial.

Ответ 2

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

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

Здесь вы можете найти файл целей (в зависимости от вашего os):

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\" />

Ответ 3

Вот как я изменил файл .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>

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

Цель публикации содержит большую часть магии. Это вызывает вызов объекта Visual Studio _CopyWebApplication для вывода веб-сайта в PublishFolder. По умолчанию папка публикации является "..\Deployment\YourWebsiteName" относительно файла проекта, но это также может быть переопределено системным свойством. Цель развертывания принимает файлы, выводимые объектом публикации, и копирует их в DeployFolder. DeployFolder можно установить с помощью System Property в TeamCity или вы можете заменить путь "Путь\To\Your\Server" в целевом развертывании.

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

Ответ 4

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

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

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

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

Я подтвердил, что после публикации в 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, тогда я будет удовлетворено

Ответ 5

Вы пытались выполнить 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, вы всегда можете попробовать добавить проект в свое решение, которое будет последним, построенное (или сделать это в проекте, который в настоящее время создается последним), и сделать нерестилище трюк в качестве командной строки после сборки в проекте.

Ответ 6

Может ли 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 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. Публикация проекта из командной строки

Ответ 7

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

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

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

Есть три этапа сборки:

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

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