Как развернуть веб-приложение ASP.NET с помощью Team Build? - PullRequest
4 голосов
/ 10 марта 2009

Мне удалось установить Team Foundation Server 2008, и я создал отдельный сервер сборки (который работает из-за сбоя моих сборок).

Я создал простое веб-приложение "Hello World" (все это стандартная страница Default.aspx) и поместил его в систему управления версиями TFS.

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

Некоторое время изучая Google, я пока не нашел пошаговое руководство по правильному развертыванию приложения из TFS Source через TeamBuild на указанном тестовом веб-сервере. Я знаю, что MS Build попадает в это уравнение, поэтому любое руководство будет полезным.

Я видел частички развертываний, с указанием таких папок, как _PublishedWebSites, но пока не нашел ничего, шаг за шагом.

Ответы [ 3 ]

4 голосов
/ 10 марта 2009

Я успешно использовал задачу exec в цели AfterDropBuild в файле TFSBuild.proj.

<Target Name="AfterDropBuild>
    <Exec Command="xcopy /Y /E &quot;$(DropLocation)\\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)\_PublishedWebsites\MyWebsite1\*.*&quot; &quot;\\server\MyWebsite1\&quot;" />
    <Exec Command="xcopy /Y /E &quot;$(DropLocation)\\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)\_PublishedWebsites\MyWebsite2\*.*&quot; &quot;\\server\MyWebsite2\&quot;" />
</Target>

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

4 голосов
/ 14 апреля 2009

Во-первых, вы должны использовать проекты WebDeployment, так как это сделает намного больше компиляции и проверки вашего кода и разметки. См. здесь для получения дополнительной информации.

У меня есть 4 настройки среды: DV [Development], PY [Prototype], PP [Pre-Production], PD [Production] все соответствующие ветви в TFS. У каждого из них также есть запись в диспетчере конфигурации sln, в которой вы можете указать, какие проекты требуются для сборки, и флаги сборки.

После правильной настройки вы можете приступить к настройке сценариев развертывания. Я предпочитаю использовать MSbuild для развертывания, так как он даст вам более детальный подход к развертыванию. Начать с MSbuild немного странно, однако, как только вы его освоите, он станет достаточно мощным.

Мой сценарий развертывания, который добавлен в конфигурацию TeamBuild, приведен ниже. В основном, как вы можете видеть, я делаю небольшую очистку после сборки, прежде чем копировать на работающие серверы. Я также использую 2 фреймворка MSbuild (импортированных сверху).

<Import Project="$(MSBuildExtensionsPath)\Microsoft\SDC Tasks - Release 2.1.3155.0\Microsoft.Sdc.Common.tasks"/>
<Import Project="$(MSBuildExtensionsPath)\FreeToDev\MSBuild Tasks Suite 3.5\FreeToDev.MSBuild.tasks"/>

<PropertyGroup>
    <InetpubFolder>\\PathToInetPub</InetpubFolder>
    <AppFolder>AppFolder</AppFolder>
    <AppFolderPath>$(InetpubFolder)$(AppFolder)</AppFolderPath>
    <WebDeployName>WebDeployProjectName</WebDeployName>
    <Debug>0</Debug>
    <AppConfiguration>DV</AppConfiguration>
</PropertyGroup>

<Target Name="AfterDropBuild">
    <Message Text="Begin Release to $(AppConfiguration) Webserver" />
    <Message Text="DropLocation = $(DropLocation)" />
    <CallTarget Targets="PostBuildCleanUp"  />
    <CallTarget Targets="DeployApp"  />
</Target>

<Target Name="DeployApp">

    <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
        <Output TaskParameter="DropLocation" PropertyName="DropLocation"></Output>
    </GetBuildProperties>

    <PropertyGroup>
        <CodeDropLocation>$(DropLocation)\$(AppConfiguration) Release</CodeDropLocation>
    </PropertyGroup>

    <ItemGroup>
        <AppFilesToDelete Include="$(AppFolderPath)\**\*.*" Exclude="$(AppFolderPath)\Library\*.*;$(AppFolderPath)\App_Offline.htm;$(AppFolderPath)\jobs\**\*.*" />
    </ItemGroup>

    <ItemGroup>
        <FilesToDeploy Include="$(CodeDropLocation)\$(AppFolder)\**\*.*" Exclude="" />
    </ItemGroup>

    <Copy SourceFiles="$(CodeDropLocation)\$(AppFolder)\App_Offline[RemoveToActivate].htm" DestinationFiles="$(AppFolderPath)\App_Offline.htm" OverwriteReadOnlyFiles="true"/>

    <Message Text="Deleting files in $(AppFolderPath)" />
    <Microsoft.Sdc.Tasks.File.DeleteFiles Files="@(AppFilesToDelete)" Force="true" Condition="$(Debug)==0" />

    <Message Text="Copy $(CodeDropLocation)\$(AppFolder) to $(AppFolderPath)" />
    <Copy Condition="$(Debug)==0" SourceFiles="@(FilesToDeploy)" DestinationFiles="@(FilesToDeploy->'$(AppFolderPath)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true"/>

    <Message Text="Deploy to $(AppConfiguration) Completed" />
    <Microsoft.Sdc.Tasks.File.DeleteFiles Files="$(AppFolderPath)\App_Offline.htm" Force="true" />

    <OnError ExecuteTargets="ErrorHandler" />
</Target>

<Target Name="ErrorHandler">
    <Message Text="Error encountered!!" />
</Target>

<Target Name="PostBuildCleanUp">

    <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
        <Output TaskParameter="DropLocation" PropertyName="DropLocation"></Output>
    </GetBuildProperties>

    <PropertyGroup>
        <CodeDropLocation>$(DropLocation)\$(AppConfiguration) Release</CodeDropLocation>
    </PropertyGroup>

    <ItemGroup>
        <PostBuildCleanUpFilesToDelete Include="$(CodeDropLocation)\*.*;$(CodeDropLocation)\bin\*.xml;$(CodeDropLocation)\bin\*.pdb"/>
    </ItemGroup>

    <RemoveDir Directories="$(CodeDropLocation)\_PublishedWebsites\Web" />
    <Microsoft.Sdc.Tasks.File.DeleteFiles Files="@(PostBuildCleanUpFilesToDelete)" Force="true">
        <Output TaskParameter="DeletedFiles" ItemName="FilesThatWereDeleted" />
    </Microsoft.Sdc.Tasks.File.DeleteFiles>
    <Message Text="The files that were removed were @(FilesThatWereDeleted)" />

    <FTDFolder TaskAction="Move" Path="$(CodeDropLocation)\_PublishedWebsites\$(WebDeployName)" TargetPath="$(CodeDropLocation)\$(AppFolder)"/>

    <RemoveDir Directories="$(CodeDropLocation)\_PublishedWebsites" />

    <RemoveDir Directories="$(CodeDropLocation)\$(AppFolder)\WebDeploy" />

    <OnError ExecuteTargets="ErrorHandler" />
</Target>

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

У меня также есть папка для каждой среды в основном проекте приложения. Здесь хранятся замены web.config (еще одна особенность проектов WebDeployment) и любые другие специальные файлы окружения.

Это будет долгий процесс, чтобы заставить его работать правильно, но, надеюсь, это поможет вам начать !! (Очевидно, если вы выберете этот apporach!)

2 голосов
/ 10 марта 2009

Это можно сделать с помощью сценариев сборки напрямую, парни из Vertigo Software, как правило, являются лучшим источником информации для многих вопросов TFS, подобных этому ... к сожалению, их сообщения в блоге обычно не занимают столь высокое место в Google. Это Джефф Этвуд, один из создателей этого сайта:

Копирование веб-файлов после сборки команды

...