자동화는 좋은 것이다. 컴퓨터가 할 수 있는 일은 컴퓨터에게 시키는 것이 맞다. 사람이 어떤 단순한 일을 수작업으로 반복하게 되면 느리고, 지루하며, 귀찮고, 다른 중요한 일에 집중할 시간을 빼앗기게 된다. 더 큰 문제는 반드시 실수를 하게 되는데 실수를 픽스하는데 불필요한 시간이 들며 경우에 따라서는 중대한 장애로 번질 수 도 있다. 그래서 자동화가 중요하다. 단순 반복적인 일이 있다면 어떻게든 자동화하여 실수를 하지 않았을까 하는 불안감에서 벗어나도록 하자.
! 빌드 자동화
- trunk/autobuild.cmd를 실행하면 deploy폴더에 셋업파일을 생성되도록 스크립트를 작성하자.
- 빌드에 필요한 tool 프로그램은 build/tools 에 두고, 그외 미리 선행적으로 설치되어야 하는 프로그램은 build/readme.txt 에 나 doc/howto-build.docx 와 같은 식으로 문서화해 둘 필요가 있다.
! 배포 자동화
- 리얼에 배포되는 빌드를 자동으로 생성하고, 결과 바이네리와 빌드 로그를 모두 보관해 둔다.
- 배포후 문제가 생기는 경우 직전 릴리스 빌드를 재배포하는 방법으로 롤백할 수 있다.
- 서버구성도
SVN or git서버 --> 빌드서버/CI서버 Test(qa)배포서버 리얼배포서버 사용자 PC
^ |______________>
| |______________>
| src |_________> setup.exe/ version.xml
개발자1 __|
개발자2 __|
...
- 개발자1이 소스를 커밋하면 개발자2는 커밋 노티를 받을 수 있다.
- 빌드서버
* 개발리더는 테스트 빌드와 릴리스 빌드를 나누어서 빌드서버에 명령을 줄 수 있다.
* 테스트빌드는 trunk, 릴리스 빌드는 trunk를 branches로 브랜치를 생성한다. 빌드시 모든 소스를 새로 내려받고 autobuild.cmd를 실행한다. 빌드가 성공하면 deploy의 결과물은 Test 배포서버로 배포된다.
* 빌드서버는 빌드와 배포를 동시에 할 수 있고, Test배포서버, 리얼배포서버로 배포 타겟을 지정할 수 있으며, 이전 빌드에 대해서 배포만 할 수 도 있다.
* 빌드서버에서의 빌드 혹은 배포가 실패할 경우 담당자에게 메일 혹은 SMS가 전송된다.
- CI서버는 주기적으로 모니터링하다가 소스가 커밋되면 소스를 내려받아서 빌드한다. 이때 추가적으로 유닛테스트를 돌리거나 정적분석 툴을 돌리거나 할 수 있다. 역시 실패할 경우 담당자에게 메일이 전송된다.