MSBuild로 똑똑하게 빌드하기

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:October 8, 2007

지난 편에서는 고통과 좌절을 경험했다. 머리를 아무리 싸매도 해결책이 안 떠올라서 좌절하던 중에 다른 분과 이야기를 나누다가 멋진 해법을 알게 됐다.

요컨대 Build만 하고 Rebuild는 하지 않는 게 가장 간단하고 직관적인 해결책이다. Build가 깨진 경우엔 CCTray에 빨간불이 들어온다. 개발자가 로그를 보고 이건 Rebuild하면 될 것 같은데?라고 판단한다. Force Build 버튼을 눌러 다시 빌드한다.

이때 요점은 평소에는 Build를 하다가 사용자가 직접 Force Build 버튼을 눌렀을 때만 Rebuild를 하게 만드는 것이다. 다행히 CruiseControl .NET은 이와 관련된 정보를 MSBuild로 넘겨준다.

MSBuild 스크립트는 이런 형태를 취한다.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Choose>
	<When Condition=" '$(CCNetBuildCondition )'=='IfModificationExists' ">
		<PropertyGroup>
			<BuildConditionForCI>Build</BuildConditionForCI>
		</PropertyGroup>
	</When>
	<Otherwise>
		<PropertyGroup>
			<BuildConditionForCI>Rebuild</BuildConditionForCI>
		</PropertyGroup>
	</Otherwise>
</Choose>

<Target Name="BuildForCI">
	<Message Text="$(BuildConditionForCI) 조건에서 빌드를 시도합니다. " Importance="high"/>
	<MSBuild
	   Projects = "@(ProjectReferences)"
	   Properties = "Configuration=Debug"
	   Targets = "$(BuildConditionForCI)"
	   StopOnFirstFailure = "true"
	   ContinueOnError="false">
	</MSBuild>
</Target>
</<Project>

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.