2009-07-09 7 views
1

TFS 용 사용자 지정 빌드 스크립트를 개발하는 중이며 TFS 빌드 스크립트를 개발, 테스트 및 배포하기위한 모범 사례가 있는지 알고 싶습니다.TFS 빌드 스크립트 용 SDLC 관리

프로덕션 빌드 서버와 별도로 개발 및 QC 환경을 설정합니까? 개발중인 스크립트 빌드가 "프로덕션"빌드를 방해하지 않도록 나머지 빌드 프로세스에서 스크립트를 개발하는 프로세스를 격리하는 다른 방법이 있습니까?

Team Build는 작업 항목을 만들고, 작업 항목을 업데이트하고, "테스트"빌드에 대해 발생하지 않았던 빌드 프로세스의 일부로 레이블을 추가하는 것을 좋아합니다.

JMM 여기

답변

3

체크 아웃 내 대답 : Modular TeamBuilds

당신은 모든 빌드에 걸쳐 포함되어있어 공통의 MSBuild 파일에 밖으로 고려 핵심 기능을 유지할 수 있습니다. 또한이 모든 파일은 광범위한 지사 구조의 일부이므로 추가 작업없이 기존 SDLC에 직접 참여할 수 있습니다. 따라서 :

  1. 빌드 스크립트를 위험하게 변경하는 경우 다른 위험한 변경과 마찬가지로 "dev"또는 "private"브랜치에서 변경하십시오.
  2. 빠른 유효성 검사만을위한 빌드 정의를 원하면 해당 빌드 정의에서 가져온 * .targets 파일에서 SkipLabel, SkipWorkItemCreation 등의 속성을 False로 설정하십시오.

# 2 번으로 확장하려면 "생산"vs "테스트"빌드의 예를 들어 보겠습니다. 프로덕션 빌드에서 레이블 지정과 같은 기능 만 사용하려고합니다. 그래서 SkipLabel 프로퍼티를 TFSBuild.proj (그리고 거기에 정의되어 있다면 TFSBuild.Common.targets)에서 제거하고 TFSBuild.Production.targets 및 TFSBuild.Test.targets에 두 개의 다른 값을 사용하여 설정합니다.

앞의 질문에서 언급했듯이 TFSBuild.proj는 나머지 빌드가 어떻게 작동하는지 제어하는 ​​마스터 msbuild 파일입니다. 여기처럼 내 보이는 내용은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 

<!-- DO NOT EDIT the project element - the ToolsVersion specified here does not prevent the solutions 
    and projects in the SolutionToBuild item group from targeting other versions of the .NET framework. 
    --> 
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> 

    <!-- Import configuration for all MyCompany team builds --> 
    <Import Project="MyCompany.TeamBuild.Common.targets"/> 

    <!-- Import build-specific configurations --> 
    <Import Condition="'$(BuildDefinition)'=='Dev - quick'"  Project="MyCompany.TeamBuild.Quick.targets" /> 
    <Import Condition="'$(BuildDefinition)'=='Main - full'"  Project="MyCompany.TeamBuild.Full.targets" /> 
    <Import Condition="'$(BuildDefinition)'=='Main - quick'" Project="MyCompany.TeamBuild.Quick.targets" /> 
    <Import Condition="'$(BuildDefinition)'=='Release - full'" Project="MyCompany.TeamBuild.Full.targets" /> 

    <!-- This would be much cleaner as we add more branches, but msbuild doesn't support it :(
     Imports are evaluated declaratively at parse-time, before any tasks execute 
    <Target Name="BeforeEndToEndIteration"> 
     <RegexReplace Input="$(BuildDefinition)" Expression=".*\s-\s" Replacement=""> 
     <Output TaskParameter="Output" PropertyName="BuildType" /> 
     </RegexReplace> 
    </Target> 
    <Import Condition="$(BuildType)==full" Project="MyCompany.TeamBuild.Full.targets" /> 
    <Import Condition="$(BuildType)==quick" Project="MyCompany.TeamBuild.Quick.targets" /> 
    --> 
</Project> 

비슷한 일을함으로써, 당신은 "빠른"모든 데브 지점에서 빌드되도록 할 수 있습니다 빌드 (더 라벨 등을 의미 당신을 위해하는) 모든 릴리스 지점에서 구축 "전체"빌드이고 Main 브랜치의 빌드는 사용자가 Visual Studio/TSWA에서 시작한 빌드 정의에 따라 달라질 수 있습니다. 나 자신, "빠른"빌드가 연속 통합으로 설정되었고 "전체"빌드가 야간에 실행됩니다.

+0

모듈 형 팀 빌드에 게시 된 것을 보았습니다.이 스크립트는 빌드 스크립트를 작성하는 훌륭한 방법이지만 빌드 스크립트 개발의 실제 프로세스에 대한 도움을 찾고 있습니다. 예를 들어, "프로덕션"에없는 빌드 스크립트를 프로덕션 빌드로 기록하지 않도록하는 방법은 무엇입니까? 그게 말이된다면. jMM – jMM

+0

구체적인 예를 들어 게시물을 확장했습니다. 도움이되는지 알려주세요. –

+0

업데이트를 추가하기 위해서는 ToolsVersion 4.0이 필요할 수도 있지만''주석 대신 언급 된 RegexReplace 메소드를 사용하십시오. – jswolf19