문제

스택 오버플로의 하단에는 Subversion 버전 번호가 있습니다.

svn 개정:679

내 제품에서 이러한 자동 버전 관리를 사용하고 싶습니다. .NET Web Site/Application, Windows Forms, WPD 프로젝트/솔루션.

이것을 어떻게 구현합니까?

도움이 되었습니까?

해결책

Jeff가 사용하는 것 같습니다. CruiseControl.NET 팟캐스트 성적표를 통해 일부 리프를 기반으로 합니다.이는 소스 제어부터 프로덕션까지 자동화된 배포 기능을 갖춘 것으로 보입니다.삽입이 일어나는 곳이 아닐까요?

다른 팁

우리는 이것을 xUnit.net 우리의 자동화된 빌드를 위해.우리는 사용 CruiseControl.net (그리고 TeamCity를 시험해 보고 있습니다).지속적인 통합을 위해 실행하는 MSBuild 작업은 빌드 번호를 자동으로 변경하므로 결과 빌드 ZIP 파일에는 적절하게 버전이 지정된 DLL 및 EXE 세트가 포함됩니다.

우리의 MSBuild 파일 정규식 대체를 수행하는 DLL에 대한 UsingTask 참조가 포함되어 있습니다.(MS-PL 라이센스도 적용되므로 이 DLL을 사용해도 됩니다.)

  <UsingTask
     AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
     TaskName="CodePlex.MSBuildTasks.RegexReplace"/>

다음으로 CI 시스템에서 자동으로 제공하는 빌드 번호를 추출합니다.원하는 경우 소스 제어 공급자에게 소스 개정 번호를 제공하도록 요청할 수도 있지만 CI 시스템의 빌드 번호가 더 유용하다는 것을 알았습니다. CI 빌드 번호로 통합 결과를 볼 수 있을 뿐만 아니라 빌드에 포함된 변경 세트로 다시 링크합니다.

 <!-- Cascading attempts to find a build number -->

 <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
       Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
       Replacement='AssemblyVersion("$1.$(BuildNumber)")'
       Files='GlobalAssemblyInfo.cs'/>
   <Exec Command="attrib -r xunit.installer\App.manifest"/>
 </Target>

이렇게 하면 AssemblyVersion 특성을 찾고 a.b.c.d 버전 번호를 a.b.c.BuildNumber로 바꿉니다.일반적으로 빌더 번호의 처음 세 부분은 고정되고 네 번째 부분은 0(예: 현재는 1.0.2.0)으로 트리에 체크인된 소스를 남겨 둡니다.

빌드 프로세스에서 SetVersionNumber 작업이 빌드 작업보다 앞에 있는지 확인하세요.마지막에는 Zip 작업을 사용하여 빌드 결과를 압축하여 모든 자동화된 빌드에 대한 바이너리 기록을 확보합니다.

코드의 어느 곳에나 다음을 추가하면 됩니다.

$Id:$

예를 들어 @Jeff는 다음과 같이 했습니다.

<div id="svnrevision">svn revision: $Id:$</div>

서버에 체크인하면 $Id:$가 현재 개정 번호로 대체됩니다.나도 이 참조를 찾았습니다.

도 있습니다 $날짜:$, $개정:$, $개정:$

당신이 사용하는 경우 ASP.Net MVC (StackOverflow가 그러하듯이) 나는 다음과 같은 글을 작성했습니다. 최신 SVN 개정판을 자동으로 가져오고 표시하는 방법에 대한 따라하기 쉬운 3단계 가이드.가이드는 바로 이 질문에 대해 스스로 생각하면서 영감을 얻었습니다!:영형)

@balloon 당신이 tortoisesvn을 사용하는 경우, 패키지를 사용할 수 있습니다. SubWCRev 프로그램.작업 복사본을 쿼리하고 가장 높은 개정 번호만 알려줍니다.물론 이는 서버측 문제에 대한 클라이언트측 접근 방식인 것처럼 보이지만 훌륭한 명령줄 프로그램이므로 출력을 캡처하여 상당히 쉽게 사용할 수 있습니다.

$rev 이와 유사한 것들은 개별 파일에 대한 개정판이므로 파일이 변경되지 않는 한 변경되지 않습니다.웹페이지의 번호는 (아마도 여기에서 가정하고 있는 것 같습니다) 전체 프로젝트의 svn 개정 번호입니다.이는 다른 사람들이 지적한 파일 개정판과는 다릅니다.

이 경우 CCNET이 프로젝트의 개정 번호를 가져와 해당 번호로 웹페이지의 일부를 다시 작성한다고 가정합니다.모든 CI 솔루션은 이를 수행할 수 있어야 하며 CCNET 및 Teamcity를 사용하여 직접 설정해야 합니다(웹 페이지는 아니지만 배포/어셈블리 버전의 자동 버전 관리).

이를 수행하려면 이를 지원하는 CI 솔루션을 사용하거나 빌드 프로세스(MSbuild/Nant)를 사용하여 해당 버전을 저장하고 "배포"하기 전에 파일에 씁니다.

@BradWilson의 답변에 추가하려면 다음을 수행하십시오. "원하는 경우 소스 제어 공급자에게 소스 개정 번호를 제공하도록 요청할 수도 있습니다."

Subversion과 MSBuild를 연결하려면 다음을 수행합니다.MSBuild 커뮤니티 작업 프로젝트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top