2009-10-08 2 views
3

저는 CruiseControl.NET 및 nAnt를 시작하면서 전체 프로세스가 어떻게 작동하는지 잘 이해하지 못합니다. 우리는 현재 Visual Source Safe에서 대부분의 솔루션을 보유하고 있으며 AssemblyInfo 파일을 사용하여 각 릴리스를 자동으로 빌드 서버 레이블로 만듭니다.CruiseControl을 사용하여 헤드 SVN 폴더를 Release 폴더로 복사

우리는 VSS 프로젝트를 SVN으로 마이그레이션하고 그에 따라 프로젝트 빌드 파일을 수정하여 SVN 저장소를 체크 아웃하고 업데이트합니다. 우리가 달성하기를 원하는 것은 소스 컨트롤에 소스의 사본을 갖고, 배포되는 프로젝트의 버전과 정확하게 일치시키는 것입니다.

우리의 SVN 따라서 설정 :

svn://solution/ 
    TRUNK/ 
    RELEASES/ 
     1.0.0/ 
     1.2.0/ 
    BRANCHES/ 

을 그래서 우리는 1.3.0로 설정된 어셈블리 정보 버전, 우리의 솔루션을 구축 강제로 할 때, 우리는 빌드 서버가 자료로, 트렁크 디렉토리를 복사 할 /1.3.0/ 디렉토리.

SVN 명령은 매우 간단합니다. svn copy src/directory dst/디렉토리. 그러나이 명령을 어디에 넣을 것이며 대상의 버전 번호를 얻으려면 어떻게해야합니까? 우리가이 프로젝트 .build 파일에서

<sourcecontrol type="svn"> 
    <trunkUrl>svn://project/trunk</trunkUrl> 
      <workingDirectory>D:\Builds\project\Src</workingDirectory> 
      <executable>C:\Subversion\bin\svn.exe</executable> 
    <username>sf_service_dev</username> 
    <password>SFx4vi-r</password> 
      <tagOnSuccess>true</tagOnSuccess> 
    <cleanCopy>true</cleanCopy> 
</sourcecontrol> 

(많은 물론 많은) :

<target name="Deploy_Release"> 
    <property name="fileandpathformyfile" value="${CCNetWorkingDirectory}\Bin\project.exe"/> 
    <echo message="fileandpathformyfile is ${fileandpathformyfile}."/> 
    <property name="ReleaseNumber" value="${fileversioninfo::get-file-version(fileversioninfo::get-version-info(fileandpathformyfile))}"/> 
    <echo message="ReleaseNumber has been detected to be ${ReleaseNumber}."/> 

    <!--Use version as needed--> 

    <!--Create the release direcory--> 
    <mkdir dir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"/> 
    <!--Copy stuff to the release directory--> 
    <copy todir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"> 
    <fileset basedir="${CCNetWorkingDirectory}\bin"> 
     <include name="*.dll" /> 
     <include name="*.exe" /> 
     <include name="*.config" /> 
     <include name="*.xml" /> 
     <include name="*.stp" /> 
    </fileset> 
    </copy> 
</target> 
빌드 서버에서

,이 .xml 파일의 예입니다

$ {trunkURL} /../ releases/$ {ReleaseNumber}로 $ {trunkURL}을 복사하기 위해 SVN 명령을 실행하려면 어떻게해야하고 어떤 파일을 사용합니까? 내가 지금 이해하는 방법은 .build 파일에서 .xml 파일로 ReleaseNumber를 가져 와서 거기서부터 실행해야합니다. 또는 .XML에서 .build로 trunkURL을 전달하고 .build 파일에서 svn 명령을 실행해야합니다.

도와주세요!

+0

nAnt를 잠시 사용 해본 적이 있습니까? 아니면 CC.Net과 nAnt를 동시에 사용하셨습니까? 왜 당신이 msbuild를 사용하지 않는지 궁금하다. – Ryu

+0

나는 둘 다 동시에 사용하기 시작했습니다. 이전 프로젝트의 경우 로컬 컴파일, 프로덕션 SOA 테스트 및 배포를 수행합니다. –

답변

5

하나의 옵션은 모든 성공적인 빌드에 태그 (일명 svn 복사본)입니다. 실제로이 기능을 내장하고 있습니다.

난 당신이 <tagOnSuccess> 당신은 또한 <tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl> 또는 <tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>

당신은 모든 성공적인 빌드, 강제 또는 연속 여부에 태그 뜻이 함께있을 수 있습니다 문제를 설정해야합니다

사실 를 사용하도록 설정을 참조하십시오. 나는 당신이 모든 빌드를 해제하기 위해 복사하고 싶지 않다고 생각합니다.문 ForceBuild

  • 명령 줄 svn의 조작을 실행하기위한 %CCNetRequestSource% 환경 변수를 확인하는 경우

    당신이 할 수있는 것은

    1. nAnt exec task
    2. 쓰기 배치 파일을 실행입니다 (CCNetWorkingDirectory 환경으로 사용할 수 있습니다 변수로 릴리스 #을 매개 변수로 전달해야 할 수도 있음)

    또한 체크 아웃 할 수 없음 ntcontrib는 svn task

    편집

    당신은 labeller를 통해 버전 번호를 관리하고 CCNetLabel 환경 변수를 통해 NANT에 통과하는 CC.Net보고 할 수 있습니다를 갖고있는 것 같아요. 다른 사람들이 자동으로 라벨을 생성하기 때문에 내가 읽은 바를 File Labeller으로하고 싶습니다. 저는 개인적으로 반복 라벨러를 사용합니다.

    CC.Net labeller를 버전 관리에 사용하면 빌드 전자 메일이 올바른 릴리스 버전을 표시한다는 이점이 있으며 <tagOnSuccess>은 디렉토리 이름에 레이블을 사용합니다.

  • +0

    아시다시피, 우리는 빌드 서버의 연속 버전과 릴리스 버전에 대해 별도의 CC.NET 구성 파일을 가지고 있습니다. 도와 주셔서 감사합니다. 생각했던 것보다 훨씬 쉽습니다! 환호 –

    +0

    버전 번호를 관리하는 CC.Net을보고 nAnt로 전달할 수 있습니다. http://confluence.public.thoughtworks.org/display/CCNET/Labeller+Blocks File Labeller가 가장 원하는 파일 – Ryu

    +0

    Can File Labeller가 AssemblyInfo 파일에서 버전 번호를 검색합니까? 또는 버전 번호 만 포함해야합니까? .build 스크립트에서 ant를 통해 version.file 파일을 쉽게 생성 할 수는 있지만 작업이 이미 완료된 경우에는이를 피하고 싶습니다. –

    관련 문제