내가 수행하는 방법이다이 (http://sajojacob.com/2009/08/how-to-chain-tfs-builds/)
어떻게 TFS 체인에 빌드? 에 게시 됨 2009 년 8 월 5 일 Sajo - No Comments ↓
최근 동료 중 한 명인 @gdurzi가 최근 나에게이 질문을 던졌습니다. TFS로 박스에서 즉시 지원받을 수있을만큼 간단합니다. 이것에 너무 많은 단점이 있습니다. 그리고 % TFSSVR % % TEAMPROJECT % % BUILDTYPE/큐 시작이
TFSBuild.exe 같은과 첫 TFSBuild.proj에서 새로운 빌드를 큐에 TFSBuild.exe에 대한 호출을 만들기 위해 지금까지 충실한은 MSBuild 작업을 사용 권장 %
TFSBuild.exe 사용시 발생하는 문제는 빌드 에이전트를 명령 줄 인수로 전달할 수 없다는 것입니다.
특정 시나리오에 따라 취할 수있는 몇 가지 접근 방법이 있으므로 여기서 시나리오를 정의 해 보겠습니다. 핵심 프로젝트를 빌드하는 Main_Build TFS 빌드 정의가 있고 동일한 Main_Build를 실행하는 여러 준비 빌드가 있어야합니다. 컴파일/빌드 작업을 수행하지만 Main_Build를 호출하는 사용자를 기반으로 배포를 위해 사용자 지정 준비를 수행해야합니다. 클라이언트 당 사용자 정의 사전 빌드 및 빌드 후 조치가 필요한 여러 클라이언트로 제품을 출시 할 때 매우 유용합니다. 따라서 TFS 2008을 사용하여 Build Chaining을 수행하는 한 가지 방법이 있습니다.
1 단계 : 빌드 정의 파일과 연결된 기본 빌드 에이전트를 사용하여 빌드를 대기시키는 Team Foundation 개체 모델을 사용하여 사용자 지정 MSBuild 작업을 만들어 보겠습니다. 큐의
샘플 코드 : QueueTFS.cs
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Build.Client;
// Get the team foundation server.
TeamFoundationServer _tfsServer = TeamFoundationServerFactory.GetServer(_tfs);
// Get the IBuildServer
IBuildServer buildServer = (IBuildServer)_tfsServer.GetService(typeof(IBuildServer));
// Get the build definition for which a build is to be queued.
IBuildDefinition definition = buildServer.GetBuildDefinition(teamProject, buildDefinition);
// Create a build request for the build definition.
IBuildRequest request = definition.CreateBuildRequest();
request.CommandLineArguments = "Pass any custom command line args here"; // Ex: Custom Targets file
// Queue the build.
buildServer.QueueBuild(request, QueueOptions.None);
2 단계 : 이제 준비 빌드 정의 파일을 생성 할 TFS에서 새 폴더로 QueueTFS.dll를 복사합니다.
이제 새로운 MSBuild 작업을 사용하고 EndToEndIteration 대상을 재정의하는 최소한의 TFSBuild.proj 파일을 만듭니다. Main_Build 빌드를 트리거하는 스테이징 빌드 정의입니다. 이 TFSBuild.proj를 손으로 작성하고 빌드 정의 UI에서 새 폴더로 프로젝트 파일 위치를 지정하기 만하면됩니다. 최소한의 TFSBuild.proj에 대한
샘플 코드 :
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
<UsingTask TaskName="MyNewCustomTFSTask" AssemblyFile="QueueTFS.dll"/>
<Target Name="EndToEndIteration">
<Message Text="About to trigger main build" Importance="high"/>
< MyNewCustomTFSTask TFS="http://TFSServer.com:8080/" TeamProject="TeamProject" BuildDefinition="Main_Build" TargetsFile="Custom.Target" XYZ="XYZ" />
<!-- When everything is done, change the status of the task to "Succeeded" -->
<SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" TestStatus="Succeeded" CompilationStatus="Succeeded"/>
</Target>
</Project>
3 단계 : 미리 빌드 및 빌드 후 대상 통화와 Main_Build TFSBuild.proj 파일을 편집합니다.
<Target Name=“BeforeCompile“>
<CallTarget Targets=“Custom_PreBuild“/>
</Target>
<Target Name=“AfterDropBuild“ Condition=“‘$(BuildBreak)’!=’true’“>
<CallTarget Targets=“Custom_PostBuild“/>
</Target>
우리는 우리가 목표는 빈 Custom_PreBuild 및 Custom_PostBuild 목표로 파일 기본을 가져 우리의 Main_Build TFSBuild.proj 조건부 수입을 추가이를 지원하기 위해뿐만 아니라 그 자체로 Main_Build 실행할 수있는 기능을 원했다. 이제 목표는 Custom_PreBuild 및 Custom_PostBuild 목표 당신과 함께 Custom.Target 및 EmptyCustom.Target 파일 생성 : $ (CustomTarget)는 request.CommandLineArguments
<Import Project="$(CustomTarget)" Condition="'$(CustomTarget)'!=''"/>
<!--Import CustomContoso.Target if no partner is passed in—>
<Import Project="EmptyCustom.Target" Condition="'$(CustomTarget)'==''"/>
단계 4 1 단계에서 명령 행 인수로 전달할 것 인 것이다 완료되었습니다.
나는 단계와이 블로그 게시물의 범위,하지만 희망을 받아야 밖에서 시작 몇 가지 다른 사소한 일들을 구축 업데이트에 대한 지원을 추가했습니다.
우리는 CC.NET로 전환을 대기열에 확장을 빌드합니다. – Sneal
CC.NET으로 여러 번 해왔습니다. TFS와 똑같이 할 수있는 좋은 방법이 있어야합니다. – user22242