-
[CI] Hudson(허드슨)@StudY/.SW engineering 2019. 2. 11. 17:02
오늘은 continuous integration tools의 개념과 내가 CI 툴로서 처음 만난 허드슨 얘기를 해볼까한다.
; continuous integration tool이 뭘까?
직역하면 계속적인 통합 도구. 즉 코드의 지속적인 통합을 보조하는 툴이라는 뜻인데.....
이렇게 들어도 사실 무슨말인지 알기가 쉽지 않다.
그렇다면 continuous integration(지속적인 통합)이 뭔지 먼저 알아봐야겠군
; continuous integration (CI)
회사에서 각 팀원들이 맡은 기능이나 파트에 대해 각자의 로컬 PC에서 유지보수 코딩을 한다.
V
각자가 코드를 수정하고 추가하고 삭제하는 등 개발하면서 서로 다른 버전의 코드들이 마구마구 생겨난다.
V
이렇게 마구마구 생겨난 코드들을 하나로 통합한다.
V
통합된 코드들을 빌드 및 배포한다.
V
배포된 새 버전의 프로그램에서 계획했던 기능 개발이 잘 완료되었는지 확인.
많은 개발자들이 매달려 코딩하는 프로그램은 위의 과정을 반복하며 그 기능을 발전시켜나간다.
파란색 박스의 코드 통합은 버전관리 툴을 이용한다. git이나 SVN이 가장 대중적이다.
이 포스트에서 말하고자하는 Hudson은 초록색 박스 과정을 위한 어플리케이션으로서, 코드를 빌드하는 "Ant" 실행의 자동화 및 관리를 위해 사용된다.
; HUDSON(허드슨)
[그림1] Hudson 로고
사실 이 포스팅을 보면서 아니 Jenkins(젠킨스)를 쓰는 요즘 시대에 웬 허드슨 포스팅이야? 라고 하는 사람들도 있으리라 생각된다.
(허드슨과 젠킨스의 관계를 모르는 사람을 위해 말하자면 허드슨이 젠킨스의 이전 버전이다.)
그리고 내가 젠킨스가 아닌 허드슨에 대한 포스팅을 올리는 이유는 아주 간단하다. 내가 회사에서 접한게 허드슨이기 때문ㅋㅋㅋㅎㅎㅎ 하지만 이 회사도 최근 젠킨스를 WAS 서버에 올리며 서서히 젠킨스로 이동하려는 시도를 하고 있다.
참고@ 허드슨 서버 소개 사이트 : http://hudson-ci.org/
위의 CI 설명 중에 이야기 한바와 같이 허드슨은 아래 [그림2]와 같은 화면을 통해 소프트웨어 빌드나 작업 실행과 같은 job들의 반복적 실행을 모니터링 및 수행할 수 있는 서버?라고 할 수 있다.
[그림2] 허드슨 실행 화면
아직도 모호하게 느껴질 수 있다는 것을 충분히 안다. 나도 이 얽히고 섥힌 시스템을 통해 어플리케이션이 배포되는 과정을 대략적으로 파악하는데 3개월이 걸렸고, 사실 지금도 알아가야할 부분이 많이 남았다고 생각한다.
쉬운 이해를 조금이나마 돕고자 각 시스템들이 어떻게 얽혀있고 어떤 순서로 동작해 어플리케이션 배포까지 완료하는지 스토리텔링 해보자면:
어플리케이션의 각 기능을 맡은 개발자들이 각자 요구사항에 맞게 코드를 수정하고, 본인 로컬 PC에서 수정한 내용이 요구사항에 맞게 잘 동작하면 SVN에 comment를 달아 수정한 코드를 commit한다. commit된 코드들을 HUDSON이 깔려있는 서버의 파일시스템으로 check out(내려받기)하여 빌드를 준비한다. 그러니까 허드슨 서버 PC에는 항상 개발자들이 commit한 최신 코드들만 존재하고 있는 상태이다.
그리고 여기서 갑자기 ANT라는 놈이 등장! ANT는 .sh 파일과 비슷하게 cmd에서 수행해야하는 작업을 target이라고 부르고 이런 여러개의 target들을 순차적으로 담고 있는 파일인데, XML형식으로 되어있다. 예를 들면, sh 파일의 echo "~~~~~" 코드는 ANT xml파일에서 <echo message="~~~~~" />처럼 태그명으로 치환된다.
이렇게 ANT 파일로 어떤 작업(target)을 할 것인지 정의하고, 각 ANT파일을 허드슨에서 호출해 수행하는데, 이것을 invoke라고 한다.
허드슨에서 하나의 작업(프로젝트)를 만들어 이 작업을 빌드하면 어떤 ANT가 수행될지 configuration에 정의한다. 만약 ANT파일들이 순차적으로 수행되어야하는 경우에는 허드슨 작업들 간에 Trigger를 걸어놓고 하나의 VIEW로 묶어두고 가장 처음 수행할 프로젝트만 빌드해주면 해당 VIEW안에 포함된 모든 project들이 자동적으로 수행되는 것이다.
지금까지 줄글로 쓴 내용을 도식화하면 아래 [그림3]과 같다.
[그림3]
그리고 여기서 나아가 허드슨을 더 효율적으로 사용하는 방법으로 Scheduling 기능을 활용하는 것이 있다. 스케쥴을 정해놓으면 정해진 시간에 프로젝트가 자동으로 수행되기 때문에 업무시간 이외에도 코드의 빌드 및 어플리케이션 배포가 가능해진다.
내가 허드슨을 처음 접하게 된 이 회사도 업무시간에 서버가 내려가지 않도록 연속적으로 Trigger가 걸려있는 View의 첫번째 수행 프로젝트에 새벽1시로 스케쥴을 걸어뒀다.
새벽 한시가 되면 허드슨 서버를 통해 배포를 위한 컴파일, 각 개발서버 파일 업로드 등이 착착착 자동 수행이 되어 아침에 딱! 출근하면 모든 서버가 배포완료되어있는 상태로 개발자들을 기다린다.
매일매일 그 전날 commit한 코드를 통합하고 배포하는 과정을 반복하면서 Continuous Integration 지속적인 코드 통합이 이뤄지는 것이다.
'@StudY > .SW engineering' 카테고리의 다른 글
[TDD워크샵] practical session | ② RomanNumber Converter (0) 2019.01.31 [TDD워크샵] practical session | ① LCD display (0) 2019.01.30 [TDD워크샵] TDD(Test Driven Development)란 무엇인가 (0) 2019.01.17 댓글