1. 젠킨스 소개

젠킨스는 지속적인 통합 및 배포를 위한 방법을 제공합니다.

젠킨스의 모태인 허든슨을 개발한 가와구치는 개발 작업에서 빌드가 깨지는 것에 질려서, 코드를 repository에 커밋하기 전에 해당 코드의 동작여부를 알 수 있는 방법을 찾고 싶었습니다.

그래서 이를 가능하게 하는 자동화 서버를 개발했는데, 그것이 허든슨입니다. ( 후에 오픈소스 커뮤니티 간의 분쟁으로 젠킨스로 갈라짐 )


젠킨스는 지속적인 통합, 즉 프로젝트 빌드, 테스트 실행, 배포 등의 통합을 자동화합니다.

즉, 젠킨스는 Maven, Ant, Gradle, Junit, Nexus와 잘 작동하며, Git, SVN과 같은 형상 관리 툴을 지원합니다.

더 놀라운 것은 Java 뿐만 아니라, WAS가 없는 Python, Node.js도 플러그인을 통해 젠킨스로 CI가 가능하다는 점입니다.





2. CI ( Continuous Integration )

젠킨스가 빌드, 테스트, 배포 등을 자동화 해준다고 하는데... 구체적으로 지속적인 통합( CI, Continuous Integration )이란 무엇일까요?

지속적인 통합은 애자일 개발 방법론에서 필요성이 드러납니다.


예를 들어, 프로젝트 중반 쯤 고객이 프로젝트 진행 상황을 알고 싶다고 합니다.

그래서 여러 개발자가 자신의 코드를 통합을 하는데, 이 때 다음과 같은 문제점들이 발생할 것입니다.

  • 다른 개발자의 코드들을 합쳐보니 실행이 안된다. ( 머지 이슈 )
  • 내 PC에서는 됐는데 통합하니 실행이 안된다. ( 환경적인 이슈 )
  • 통합되기 전에는 자신이 갖고 있는 소스가 최근 통합된 코드가 아닐 수 있다.

즉, 지속적으로 여러 개발자들이 통합을 하지 않은 상태에서는 개발 중간 과정을 직접 눈으로 확인하기가 어렵습니다.


젠킨스를 통해 코드를 지속적으로 통합하면, 고객에게 프로젝트 진행 상황을 직접 눈으로 확인시켜 줄 수 있는 장점이 있습니다.

고객은 그 때 그 때 바로 확인하여 원하는 요구사항이 아니었다면, 바로 다음 날에 수정요청을 할 수 있기 때문에 프로젝트의 성공 가능성이 높아집니다.

이와 같이 개발하는 기법을 애자일 개발 방법론이라고 합니다.

따라서 Jenkins에서 가장 중요한 것은 고객이 수시로 확인할 수 있도록 항상 빌드가 유지해야 한다는 것입니다.





3. CI가 이루어지기 까지

그렇다면 Jenkins는 어떤 과정을 통해 CI를 할까요?


  1. 각 개발자들은 깃헙에서 코드를 공유합니다.
  2. Jenkins는 깃헙에서 코드를 가져와서 오류를 체크합니다.
  3. 그리고 의존 관계에 있는 라이브러리들을 다운 받습니다.
  4. 테스트 코드가 있으면 테스트를 실행합니다.
  5. 테스트에 성공할 경우, 빌드를 해서 실서버에 재배포 합니다.

Jenkins에 대해 오해할 만한 것이 있는데, Jenkins는 빌드, 테스트, 배포 등을 직접 실행하는 것이 아닙니다.

단지 빌드, 테스트, 배포를 실행시키는 역할을 할 뿐입니다.

즉, work flow를 제어하는 것이지, 소스를 가져오거나 Maven을 직접 실행하는게 아니라는 것입니다.




이상으로 애자일 개발 방법론과 관련있는 지속적인 통합( CI )과 무료 오픈소스인 Jenkins에 대해 알아보았습니다.

Jenkins를 사용하는 방법은 여기를 참고해주세요.