[Jenkins] Jenkins란?

[Jenkins] Jenkins란?

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

젠킨스는 Maven, Ant, Gradle, Junit, Nuxus와 잘 작동하며, Git, SVN과 같은 형상 관리 툴을 지원합니다.
더 놀라운 것은 Java뿐만 아니라, WAS가 없는 Python, Node.js도 플러그인을 통해 젠킨스로 CI가 가능하다는 점입니다.



CI(Continuous Integration)

젠킨스가 빌드, 테스트, 배포 등을 자동화 해준다고 하는데.... 구체적으로 지속적인 통합(CI)란 무엇일까요?
지속적인 통합은 애자일 개발 방법론에서 필요성이 드러납니다.

예를 들어, 프로젝트 중반 쯤 고객이 프로젝트 진행 상황을 알고 싶다고 합니다.
그래서 여러 개발자가 자신의 코드를 통합을 하는데, 이 때 다음과 같은 문제점들이 발생합니다.
1. 다른 개발자의 코드들을 합치니 실행이 안된다.
2. 내 PC에서는 됐는데 통합하니 실행이 안된다.
3. 통합되기 전에는 자신이 갖고 있는 소스가 최근 통합된 코드가 아닐 수 있다.

즉 지속적으로 여러 개발자들이 통합을 하지 않은 상태에서는, 개발 중간 과정을 직접 눈으로 확인하기가 어렵습니다.
젠킨스를 통해 코드를 지속적으로 통합하면, 고객에게 프로젝트 진행 상황을 직접 눈으로 확인시켜 줄 수 있는 장점이 있습니다.
고객이 이를 바로 확인하여, 원하는 요구사항이 아니였다면 바로 다음 날에 개발자들은 이를 수정할 수 있기 때문에 프로젝트의 성공 가능성이 높아집니다.
이와 같이 개발하는 기법을 애자일 개발 방법론이라고 합니다.
따라서 젠킨스에서 가장 중요한 것은 고객이 수시로 확인할 수 있도록 항상 빌드가 유지되어야 한다는 것입니다.


CI가 이루어지기 까지

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

젠킨스에 대해 오해할 만한 것이 있는데, 젠킨스는 빌드, 테스트, 배포 등을 직접 실행하는것이 아닙니다
단지 빌드, 테스트, 배포를 실행시키는 역할을 할 뿐입니다.
즉 workflow를 제어하는 것이지, 소스를 가져오거나 Maven을 직접 실행하는것이 아니다.


출처


댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?