2009-03-09 2 views
4

Team Foundation Server 2008을 설치하고 별도의 빌드 서버를 만들었습니다 (현재 빌드가 실패하여 작동 함).Team Build를 사용하여 ASP.NET 웹 응용 프로그램을 배포하는 방법은 무엇입니까?

저는 간단한 "Hello World"웹 응용 프로그램 (모두 표준 Default.aspx 페이지)을 만들고 TFS의 소스 제어 시스템에 포함 시켰습니다.

이전에는 TFS 이전에 웹 응용 프로그램을 사전 컴파일하고 결과를 xcopy로 미리 작성된 IIS 가상 디렉터리에 복사했습니다.

Google을 수시로 채색하면서 TeamBuild를 통해 TFS 소스에서 지정된 테스트 웹 서버로 애플리케이션을 올바르게 배포하는 단계별 가이드를 아직 찾지 못했습니다. MS Build가이 방정식에 속한다는 것을 알고 있으므로 어떤 지침이 도움이 될 것입니다.

언급 된 _PublishedWebSites와 같은 폴더를 사용하여 배포에 대한 약간의 부분을 보았지만 아직 단계적으로 찾을 수있는 항목이 없습니다.

답변

4

.

<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 서비스 사용자가 복사 할 서버의 폴더에 액세스하려면 사용 권한을 올바르게 설정해야합니다.

+0

여기에 설명 된 내용을 설명하는 다른 리소스를 발견했습니다. 예전의 소스 제어 시스템에서 웹 응용 프로그램을 성공적으로 마이그레이션하고, 빌드를 생성하고 복사 명령 – kd7

2

이것은 빌드 스크립트를 통해 직접 수행 할 수 있습니다. Vertigo Software 직원은 일반적으로 다음과 같은 TFS 관련 질문에 많은 정보를 제공합니다. 불행히도 블로그 게시물은 일반적으로 Google에서 높은 순위를 차지하지 않습니다. 제프 앳 우드,이 사이트의 제작자 중 하나이 하나의 : 나는 TFSBuild.proj 파일의 AfterDropBuild 대상의 간부 인 작업을 사용하여 성공을 거두었습니다

Copying Web Files After a Team Build

4

먼저 WebDeployment 프로젝트를 사용해야합니다. 그러면 코드와 마크 업을 더 많이 컴파일하고 검사 할 수 있습니다. 자세한 내용은 here을 참조하십시오.

나는 DV [개발], PY [프로토 타입], PP [프리 프로덕션], PD [프로덕션] 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> 

분명히 시스템 설정을 수정해야합니다. 또한 새 빌드 건너편을 복사하기 전에 대상 폴더를 지 웁니다. 이는 시스템이 깨끗한 지 확인하기위한 것이지만 분명히 ExcludedFiles 목록에 보관해야하는 항목을 추가해야합니다.

기본 응용 프로그램 프로젝트의 각 환경에 대한 폴더도 있습니다. 이것은 web.config 대체 (WebDeployment 프로젝트의 다른 기능) 및 기타 환경 관련 파일을 보유합니다.

제대로 작동하려면 시간이 오래 걸리지 만 잘하면 시작됩니다! (분명히이 apporach를 선택했다면!)