SVN 개정 번호를 내 ASP.NET 웹 사이트와 어떻게 동기화합니까?


93

Stack Overflow는 하단에 Subversion 버전 번호가 있습니다.

svn 개정 : 679

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

어떻게 구현합니까?


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

내가 말했듯이 당신이 SubWCRev에 대한 TortoiseSVN을 사용하지 않을 경우 여기 , 당신이 사용할 수있는 svnversion 같은 일을한다.
nickf

답변:


31

Jeff가 팟 캐스트 기록을 통해 일부 리프 링을 기반으로 CruiseControl.NET을 사용하는 것 같습니다 . 소스 제어에서 프로덕션까지 자동화 된 배포 기능이있는 것 같습니다. 이것이 삽입이 일어나는 곳일까요?


2
CruiseControl.Net을 사용하지 않는 경우 내 대답을 확인하십시오 (부끄러운 플러그!)- stackoverflow.com/questions/163/… ; o)
Andrew

링크는 @saint_groceon 고장
Cacho 산타

27

자동화 된 빌드를 위해 xUnit.net으로 이를 수행 합니다. 우리는 CruiseControl.netTeamCity를 사용 하고 있습니다. 지속적인 통합을 위해 실행하는 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 작업을 사용하여 빌드 결과를 압축하여 모든 자동화 된 빌드에 대한 바이너리 기록을 얻습니다.


25

코드의 아무 곳에 나 다음을 추가하여 수행 할 수 있습니다.

$Id:$

예를 들어 @Jeff는 다음을 수행했습니다.

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

그리고 서버에 체크인했을 때 $ Id : $를 현재 개정 번호로 대체했습니다. 이 참조찾았습니다 .

또한이 $ 날짜 : $ , $ 레브 : $ , $ 수정 : $는


파일에 svn : keywords 속성이 설정되어 있는지 확인해야합니다. 그렇지 않으면 $ Id $ 등이 자동으로 대체되지 않습니다. 페이지를 참조 하십시오. (svn : keywords로 스크롤)
Michael Stum

1
방금 $ Rev $를 사용하여 이것을 시도했으며 어느 정도 작동합니다. 문제는 그것이 나타나는 파일이 변경 될 때만 키워드를 업데이트하는 것처럼 보인다는 것입니다. 즉, $ Rev $가 포함 된 파일 (제 경우에는 ASP.NET 마스터 페이지)에 영향을주지 않는 프로젝트가 변경되면 프로젝트는 사용자에게 표시되는 것보다 더 높은 개정을 갖게됩니다. . 아무도 이것에 대해 어떤 생각을 가지고 있습니까? SVN 이 파일의 키워드 를 항상 업데이트하도록 하는 방법이 있습니까?
Chris Roberts

5
특정 파일에 대한 마지막 변경 사항의 개정 번호 만 삽입하지 않습니까? 두 개의 파일 저장소를 설정하고 하나를 변경하고 내보내기와 체크 아웃을 모두 시도했고 다른 파일은 두 경우 모두 1로 유지되었습니다.
Lasse V. Karlsen

lassevk가 정확합니다. 이것은 파일 자체가 변경 될 때만 변경됩니다.
Bruno Lopes

VisualSVN 및 TortoiseSVN을 사용하여 $ Id : $를 추가하면 페이지가 "$ Id : $"를 렌더링하게됩니다. 이 답변이 작동하는 서버 / 클라이언트를 기록하는 것이 유용 할 수 있습니다.
Travis

17

ASP.Net MVC(StackOverflow가 사용하는 것처럼) 사용중인 경우 최신 SVN 개정판을 자동으로 가져오고 표시하는 방법에 대한 따라하기 쉬운 3 단계 가이드를 작성했습니다 . 가이드는이 질문에 대해 스스로 생각하면서 영감을 얻었습니다! :영형)


훌륭하게 들리지만 링크가 끊어졌습니다!
Peter C

1
이것은 SVN 개정판을 기반으로 버전 관리를 자동으로 표시 할 수있는 훌륭한 솔루션이었습니다. 한 가지 장점은 SVN 서버를 호출 할 필요가 없다는 것입니다.
Ben Elder

링크가 깨진 또는 사이트가 다운됩니다
Cacho 산타

1
덕분 고정 @cacho -는 서버 장애 [원문]였다 O)
앤드류

10

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


9

$rev다른 것들은 개별 파일에 대한 개정이므로 파일이 변경되지 않는 한 변경되지 않습니다. 웹 페이지의 번호는 전체 프로젝트에 대한 svn 개정 번호입니다 (대부분 여기에서 가정합니다). 이것은 다른 사람들이 지적 해 온 파일 개정판과 다릅니다.

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

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.