체크 아웃 내 대답 : Modular TeamBuilds
당신은 모든 빌드에 걸쳐 포함되어있어 공통의 MSBuild 파일에 밖으로 고려 핵심 기능을 유지할 수 있습니다. 또한이 모든 파일은 광범위한 지사 구조의 일부이므로 추가 작업없이 기존 SDLC에 직접 참여할 수 있습니다. 따라서 :
- 빌드 스크립트를 위험하게 변경하는 경우 다른 위험한 변경과 마찬가지로 "dev"또는 "private"브랜치에서 변경하십시오.
- 빠른 유효성 검사만을위한 빌드 정의를 원하면 해당 빌드 정의에서 가져온 * .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에서 시작한 빌드 정의에 따라 달라질 수 있습니다. 나 자신, "빠른"빌드가 연속 통합으로 설정되었고 "전체"빌드가 야간에 실행됩니다.
모듈 형 팀 빌드에 게시 된 것을 보았습니다.이 스크립트는 빌드 스크립트를 작성하는 훌륭한 방법이지만 빌드 스크립트 개발의 실제 프로세스에 대한 도움을 찾고 있습니다. 예를 들어, "프로덕션"에없는 빌드 스크립트를 프로덕션 빌드로 기록하지 않도록하는 방법은 무엇입니까? 그게 말이된다면. jMM – jMM
구체적인 예를 들어 게시물을 확장했습니다. 도움이되는지 알려주세요. –
업데이트를 추가하기 위해서는 ToolsVersion 4.0이 필요할 수도 있지만' '주석 대신 언급 된 RegexReplace 메소드를 사용하십시오. –
jswolf19