Jenkis?

Jenkins?

JenkinsLogo

JenkinsOpen Source CI(Continuous Integration) Tool 로써 팀의 구성원들이 작업한 내용을 정기적으로 통합하는 것을 의미한다. 원래는 ‘허드슨’ 이라는 이름으로 잘 알려져있었지만 2010년 오라클과의 상표권 문제로 인해 Jenkins로 이름이 바뀌게 되었다.

Jenkins홈페이지


CI(Continuous Integration)

CI(Continuous Integration)는 팀의 구성원들이 작업한 내용을 정기적으로 통합하는 것을 말한다. 하나의 프로젝트를 리드하는 매니저가 일을 여러가지로 나눠서 팀원들에게 분배하고 각자 개발한 부분을 Git이나 SVN을 통해 Submit된 코드들을 정기적으로 통합하는 것이다.

이전에 Travis CI를 사용해볼 기회가 있었는데 Travis CI를 Git과 연동시켜놓으면 자신이 Push를 할 경우마다 .travis.yml에 명시되어있는 옵션대로 해당코드의 테스트를 진행한다. 이렇게 진행한 테스트를 통해 자신이 개발한 코드가 실제 서버에 올라갔을 경우에도 문제없이 작동하는지를 확인할 수 있다.


Jenkins가 제공하는 기능

  • 웹 인터페이스를 통한 간편한 설정.
  • 강력하고 편리한 Reporting 기능.
  • 지속적인 자동화 빌드.
  • 지속적인 자동화 테스트.
  • 커버리지 감시.
  • 코드 품질 감시.
  • 다양한 인증기반과 결합한 인증 및 권한 관리 기능.
  • Groovy script를 이용한 고수준의 Job Scheduling 기능.
  • 커맨드라인 인터페이스 제공.
  • 자동화된 배포 관리.
  • 분산빌드 기능.
  • 윈도우 커맨드 스케쥴링 실행기능.

이러한 기능들 외에도 추가되고 있는 플러그인을 통해서 간단히 기능을 추가/확장할 수 있다.


Jenkins를 사용하는 이유?

이러한 기능을 가지는 Jenkins 서버를 사용하는 이유는 아래와 같다.

  • 프로젝트의 빌드가 정상적으로 되고 있는지 체크할 때.
  • 자동으로 유닛 테스트(Unit Test)와 통합 테스트(Integration Test)의 정기적인 실행과 결과에 문제가 있을 경우에 이메일을 통해서 결과확인.
  • 코드의 질을 조절.

jenkinsWork

형상관리 Tool(GitHub)과의 연동

Jenkins이전에는 일정 시간마다 빌드를 실행하는 nightly-build(주로 심야시간대에 타이머에 의해 진행된 빌드)를 주로 하곤하였다. Jenkins는 정기적인 빌드에서 더 나아가 Git과 같은 형상관리 Tool과 연동함으로써 소스의 Commit을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동되도록 설정할 수 있다.

물론 Commit횟수만큼 빌드를 실행하는 것이 아니라 Queueing되어 자신의 실행순서를 기다린다.

자동화된 빌드가 가져다주는 이점

  • 프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출.
  • 자동화 테스트 수행.
  • 정적 코드 분석에 의한 코딩 규약 준수여부 체크.
  • 프로파일링 툴을 이용한 소스 변경에 따른 성능변화 감시.
  • 결합 테스트 환경에 대한 배포작업.
  • 각종 배치 작업의 간략화.
  • 순수한 개발 작업 이외에 DB셋업, 환경설정, 디플로이 작업과 같은 단순작업에 쓰이는 시간을 줄이도록 함.
  • 데이터베이스의 구축, 서버에의 디플로이, 라이브러리 릴리즈와 같이 커맨드라인에서 진행되던 작업들을 웹 인터페이스를 통해 가능하도록 함.


Jenkins씨는 집사

위에서 언급한 것들과 같이, Jenkins는 다양한 작업들을 손쉽게 처리할 수 있도록 해주지만 테스트를 만들고 빌드를 하는 환경을 만드는 작업 등 아직 많은 작업들이 남아있다.

Jenkins씨를 제대로 부려먹기 위해서는 다음과 같은 작업이 선행되어야 한다.


Build 자동화의 확립

Maven을 사용한 빌드는 이제 Java의 대세로 자리잡았다. 이미 빌드관리 툴을 이용해 프로젝트를 진행하고 있으면 Jenkins를 사용하자.


자동화 테스트

자동화 테스트는 Jenkins를 사용하는 이유 중 가장 큰 이유라고 말한다. 그리고 사실상 자동화 테스트가 포함되지 않은 빌드는 CI 자체가 불가능하다고 한다.

JenkinsGit과 같은 버전관리 시스템과 연동하여 코드변경을 감지하고 자동화 테스트를 수행해 줌으로서 코드의 오류를 알려준다. 그리고 개발자들에게 이러한 오류들을 리펙토링을 통해 제거할 수 있는 기회를 준다.

angryJenkins


테스트 커버리지

Jenkins는 자동화 테스트 실시와 더불어 테스트 커버리지도 알려준다.


코드 표준 준수여부 검사

자동화 테스트와 마찬가지로 개인이 미처 실시하지 못한 코드 표준 준수여부의 검사나 정적 분석을 통한 코드 품질향상을 할 수 있도록 해준다.


빌드 Pipe Line 구성

2개 이상의 모듈로 구성되는 프로젝트의 경우, 레이어드 아키텍쳐가 적용되어있다. 그리고 이러한 프로젝트를 테스트 할 경우에는 이에 맞는 빌드 Pipe Line 구성이 필요하다. Build PipeLine Plugin을 이용하면 이를 웹 인터페이스를 통해 간단히 만들수 있다.


Jenkins 설치방법은 아래의 블로그를 참조한다.

Jenkins 설치