본문 바로가기

프로젝트 자동화

[프로젝트 자동화] cruisecontrol.net 활용

팀에 빌드 자동화에 대한 이슈가 있어서 적용하는 것을 진행했다... 순탄치는 않았고, 아직도 많이 부족하지만 기억을 위해서 몇자 메모를 해둔다.


1. 필요 프로그램.

 - cruisecontrol.net

: CI 서버계의 할아버지.

: 저 커뮤니티가 가장 활발하여 정보를 구하기 쉽다는 장점이 있다.

: CI 서버 = cruisecontrol.net 이라고 인식이 될 정도이다.

: 안정성이 확보되어 있다고 할 수 있다.

 - CCTray

: cruisecontrol.net을 손쉽게 활용할 수 있도록 해주는 UI툴.


2. 준비.

 - 1) IIS 서버 설치.

: cruisecontrol은 자체 웹서버를 제공하지 않기 때문에 별도의 웹서버를 설치해야 한다.

현재 팀은 윈도우 기반이기 때문에 IIS 서버를 설치한다.

: 이 IIS 서버를 통해서 빌드 결과를 확인 할 수 있다.

: 설치 방법은 다른 분들이 이미 많이 포스팅 했으니 패스.

 - 2) cruisecontrol.net 설치

: next만 누르면 되는 간단한 설치.

 - 3) CCTray 설치

: 역시나 next만 누르면 되는 간단한 설치.


3. ccnet.config 작성.

 - 예제.

<cruisecontrol>

  <project name="MyProject">

<webURL>http://localhost/ccnet/server/local/project/MyProject/viewServerReport.aspx</webURL>

<sourcecontrol type="svn">

<trunkUrl>업데이트를 진행할 타켓 SVN 주소</trunkUrl>

<workingDirectory>작업디렉토리(ex - d:\MyProcject)</workingDirectory>

<executable>SVN 실행파일 위치(svn.exe)</executable>

<username>svn계정</username>

<password>svn패스워드</password>

<autoGetSource>True</autoGetSource>

</sourcecontrol>

<triggers>

      <scheduleTrigger time="23:10" buildCondition="ForceBuild" name="Scheduled"/>

    </triggers>

    <tasks>

      <devenv>

        <solutionfile>빌드를 진행할 대상 솔루션.sln</solutionfile>

        <configuration>Release</configuration>

        <buildtype>ReBuild</buildtype>

        <executable>C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com</executable>

        <buildTimeoutSeconds>120</buildTimeoutSeconds>

      </devenv>

      <buildpublisher>

      </buildpublisher>

    </tasks>

    <labeller type="dateLabeller" />

    <publishers>

    <statistics />

    <xmllogger />

    <email from="계정@gmail.com" mailhost="smtp.gmail.com" mailport="587" useSSL="TRUE" mailhostUsername="계정@gmail.com" includeDetails="TRUE" mailhostPassword="비밀번호" >

        <users>

            <user name="메일 받을 대상자1" group="buildmaster" address="대상자 메일 주소" />

        </users>

        <groups>

            <group name="buildmaster">

              <notifications>

                <notificationType>Always</notificationType>

                <!--<notificationType>Failed</notificationType>-->

              </notifications>

            </group>

        </groups>

    </email>

    </publishers>

  </project>

</cruisecontrol>


위에서 아래 순으로 설명을 적어보자. 


 project name : 프로젝트의 이름

 webURL : 설치된 IIS를 통해서 결과를 리포팅 받는 웹 주소.

 sourcecontrol : 소스 제어 부

- trunkUrl : svn의 타켓 주소가 되겠다.

- workingDirectory : svn의 업데이트를 진행할 컴퓨터의 로컬 작업디렉토리.

- executable : 실행할 svn의 exe의 위치이다. 

 : 해서 CI 서버에서 svn의 활용하려면 SVN이 설치 되어 있어야 하거나 가상 SVN을 설치해야 한다. 

 : 다른 방법은 아래에서 설명하도록 한다. 

- username/password : SVN의 계정과 패스워드

 triggers : 동작 이벤트를 설정하는 부.

- 위의 예시는 23시 10분에 ForceBuild를 실행하는 것이다. 

- 다른 예로 <intervalTrigger seconds="30"/> 이라고 한다면 30초 마다 소스의 변화를 체크 한다. 

 tasks : 작업 부.

- solutionfile : 빌드를 진행할 대상 솔루션의 위치. 

- configuration : Release와 Debug설정이 가능하다.

- buildtype : ReBuild로 빌드를 하며 다른 설정도 가능하다.

- executable : 컴파일러의 위치인데 닷넷의 경우는 devenv.exe가 아니라 devenv.com임을 주의해야 한다. 

- buildTimeoutSeconds : 빌드 시간 보장으로 기본적으로 어느 정도 설정을 하지 않아도 보장 하지만 가끔 타임오버가 걸리는 수가 있으니 추가 해 주도록 한다.

 email

- CI 서버의 꽃이라고 할 수 있는 결과 리포팅 자동화의 일환으로 예제에서는 email 리포팅을 적용하였다.

- 가장 손쉽게 gmail을 사용하였다. gmail은 가입시 개인정보를 요구하지 않기 때문에 팀 단위에서 사용하기에도 적합하지 않나 라고 생각해 본다. 결과를 받을 그룹을 지정하고 결과를 통보를 notificationType을 통해서 설정을 하는데. 현재 Always 설정은 항시 빌드시에 결과를 받는다고 것으로 초반에 구축시에 권장하며, 추후 메일이 쌓일 경우에는 Failed 설정을 통해서 실패시에만 전달 받도록 할 수 있다.


 기타

- 예시에서는 svn활용을 ccnet.config에 추가해서 구성는데, 이 경우는 해당 컴퓨터에 svn 서버가 설치되어 있어야 하는 문제가 발생한다. svn 클라이언트에는 svn.exe가 없기 때문이다. 해서 별도의 svn 서버 컴퓨터가 존재 한다면 살짝 고민이 생기게 된다. 이 경우의 해결책이라고 까지는 그렇지만, 간단한 방법하나는 빌드 서버에 svn 클라이언트를 설치, svn 업데이트를 진행하는 배치파일을 작성하고 윈도우의 작업 스케줄러에서 이 배치 파일을 실행시키는 방법이 있다. 


배치 파일의 내용은 더 없이 간단하다 svn update "업데이트 대상 디렉토리 위치" 


이상 cruisecontrol 구축? 적용? 구성? 멀 적은건지 모르겠네.