Stack Overflow는 하단에 Subversion 버전 번호가 있습니다.
svn 개정 : 679
내 .NET Web Site/Application
, Windows Forms, WPD 프로젝트 / 솔루션에서 이러한 자동 버전 관리를 사용하고 싶습니다 .
어떻게 구현합니까?
Stack Overflow는 하단에 Subversion 버전 번호가 있습니다.
svn 개정 : 679
내 .NET Web Site/Application
, Windows Forms, WPD 프로젝트 / 솔루션에서 이러한 자동 버전 관리를 사용하고 싶습니다 .
어떻게 구현합니까?
답변:
Jeff가 팟 캐스트 기록을 통해 일부 리프 링을 기반으로 CruiseControl.NET을 사용하는 것 같습니다 . 소스 제어에서 프로덕션까지 자동화 된 배포 기능이있는 것 같습니다. 이것이 삽입이 일어나는 곳일까요?
자동화 된 빌드를 위해 xUnit.net으로 이를 수행 합니다. 우리는 CruiseControl.net
TeamCity를 사용 하고 있습니다. 지속적인 통합을 위해 실행하는 MSBuild 작업은 자동으로 빌드 번호를 변경하므로 결과 빌드 ZIP 파일에는 적절하게 버전이 지정된 DLL 및 EXE 집합이 포함됩니다.
우리의 MSBuild에서 파일 (이뿐만 아니라 MS-PL 라이센스에 의해 덮여 당신이있는 거 환영이 DLL을 사용하는) : 정규 표현식 교체를 수행하는 DLL에 대한 UsingTask 참조가 포함
<UsingTask AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace"/>
다음으로 CI 시스템에서 자동으로 제공하는 빌드 번호를 추출합니다. 원하는 경우 소스 제어 공급자에게 소스 개정 번호를 제공 할 수도 있지만 CI 빌드 번호로 통합 결과를 볼 수있을뿐만 아니라 빌드에 포함 된 변경 세트에 다시 링크합니다.
<!-빌드 번호를 찾기위한 계단식 시도-> <PropertyGroup Condition = " '$ (BuildNumber)'== ''"> <BuildNumber> $ (BUILD_NUMBER) </ BuildNumber> </ PropertyGroup> <PropertyGroup Condition = " '$ (BuildNumber)'== ''"> <BuildNumber> $ (ccnetlabel) </ BuildNumber> </ PropertyGroup> <PropertyGroup Condition = " '$ (BuildNumber)'== ''"> <BuildNumber> 0 </ BuildNumber> </ PropertyGroup>
(TeamCity의 BUILD_NUMBER, CC.net의 ccnetlabel을 차례로 시도하고 둘 다없는 경우 기본값 0으로 설정하여 자동화 된 빌드 스크립트를 수동으로 테스트 할 수 있습니다.)
다음으로 빌드 번호를 모든 프로젝트에 연결하는 GlobalAssemblyInfo.cs 파일로 설정하는 작업이 있습니다.
<Target Name = "SetVersionNumber"> <RegexReplace 패턴 = 'AssemblyVersion \ ( "(\ d + \. \ d + \. \ d +) \. \ d +"\)' Replacement = 'AssemblyVersion ( "$ 1. $ (BuildNumber)")' 파일 = 'GlobalAssemblyInfo.cs'/> <Exec Command = "attrib -r xunit.installer \ App.manifest"/> </ 대상>
이렇게하면 AssemblyVersion 특성을 찾고 abcd 버전 번호를 abcBuildNumber로 바꿉니다. 일반적으로 소스는 빌더 번호의 처음 세 부분이 고정되고 네 번째 부분은 0 (fe, 오늘은 1.0.2.0)으로 트리에 체크인 된 상태로 둡니다.
빌드 프로세스에서 SetVersionNumber 작업이 빌드 작업보다 우선하는지 확인합니다. 마지막으로 Zip 작업을 사용하여 빌드 결과를 압축하여 모든 자동화 된 빌드에 대한 바이너리 기록을 얻습니다.
ASP.Net MVC
(StackOverflow가 사용하는 것처럼) 사용중인 경우 최신 SVN 개정판을 자동으로 가져오고 표시하는 방법에 대한 따라하기 쉬운 3 단계 가이드를 작성했습니다 . 가이드는이 질문에 대해 스스로 생각하면서 영감을 얻었습니다! :영형)
$rev
다른 것들은 개별 파일에 대한 개정이므로 파일이 변경되지 않는 한 변경되지 않습니다. 웹 페이지의 번호는 전체 프로젝트에 대한 svn 개정 번호입니다 (대부분 여기에서 가정합니다). 이것은 다른 사람들이 지적 해 온 파일 개정판과 다릅니다.
이 경우 CCNET이 프로젝트의 개정 번호를 가져와 해당 번호로 웹 페이지의 일부를 다시 작성한다고 가정합니다. 모든 CI 솔루션이이를 수행 할 수 있어야하며 CCNET 및 Teamcity로 직접 설정해야합니다 (웹 페이지는 아니지만 배포 / 어셈블리 버전의 자동 버전 관리).
이렇게하려면이를 지원하는 CI 솔루션을 사용하거나 빌드 프로세스 (MSbuild / Nant)를 사용하여 해당 버전을 저장하고 "배포"하기 전에 파일에 기록하십시오.
@BradWilson의 답변에 추가하려면 "원하는 경우 소스 제어 공급자에게 소스 개정 번호를 제공 할 수도 있습니다."
Subversion과 MSBuild를 연결하려면 : MSBuild 커뮤니티 작업 프로젝트