[Deployment_Tool] 9.Jenkins Build





jenkins를 이용한 Build



[Deployment_Tool] 6.Jenkins 에서 jenkins 서버에 jenkins를 설치하였는데요~!

이제 jenkins를 이용해서 build 작업을 해보겠습니다.

[Spring] 15.SpringProject-전체목록구현 에서의 STS 프로젝트를 빌드하겠습니다!


jenkins는 통합 관리 툴인데~ Github 서버에 commit 된 소스를 빌드하고 테스트하고 배포까지해주죠!

소스 빌드는 실질적으로 Maven이 해줍니다!


Maven



Maven은 소스코드로부터 배포 가능한 산출물을 빌드하는 빌드 툴이기도 하고 스프링 프로젝트에서처럼 필요한 라이브러리를 자동으로 설치해주는 자바용 프로젝트 관리 툴이기도 합니다!


Maven이 지원하는 기능은 다음과 같이 있습니다!


image




이클립스에서 maven이 기본으로 탑재되어있기에 Spring project를 생성했을 때 maven의 설정파일인 pom.xml도 기본으로 생성된 것입니다!

maven은 필요한 라이브러리를 자동으로 다운받는 것 뿐만아니라 빌드까지 담당합니다!

자세한 것은 다음에 따로 포스팅하겠습니다!

결론은 저희는 jenkins 서버에서 소스를 빌드할 때 maven을 이용할 것입니다!


따라서 jenkins 서버에 jenkins 계정으로 maven을 설치해줍니다!


image



잘 설치되었나봐볼까요??


image



그리고 maven home 주소를 복사해둡니다! 좀 있다 home 주소를 사용합니다!


jenkins 빌드작업



이제 jenkins에 접속해서 jenkins 관리 - Global Tool Configuration 을 눌러줍니다.


image



그 다음 maven을 add해줍니다! 이 때 아까 복사한 maven home 주소를 복사해주어야합니다!


image



그럼 이제 새로운 작업을 추가해보겠습니다! 새로운 Item - 새 작업 - FreeStyle Project를 선택해줍니다!


image




그리고 프로젝트 이름과 github 계정과 github 에 있는 빌드할 프로젝트 주소를 입력해줍니다!


image



그 다음 Build Now 를 누르면 빌드가 됩니다~!


image



와우! 무사히 github에 있는 스프링 프로젝트가 빌드 되었습니다!

github에서 소스가 변경되서 commit 되면 jenkins에서도 자동으로 변경되어 빌드해줍니다!


STATIC ANALYSIS TOOLS



jenkins에서는 STATIC ANALYSIS TOOL을 제공하는데 정적 분석이란 소스 코드의 품질를 평가하고, 실행 전에 코드의 수준을 분석하는 것입니다!

즉, jenkins에서 STATIC ANALYSIS TOOL을 이용해 빌드 후 테스트를 할 수 있습니다!


STATIC ANALYSIS TOOL은 다음과 같은 것이 있습니다!

  • CheckStyle : 규격화 된 java 코드 분석



  • PMD : Java, Javascript, PLSQL, XML, Velocity 등 코드 품질 분석



  • Jacoco & FindBug : Test(UnitTest) 적용범위 & 잠복 버그 분석



  • SonarQube : Complexity, Code dup., Coding Rule, Test, Coverage 분석 (위의 3개를 합쳤다고 생각)



한 번 위의 툴을 다운받아서 아까 스프링 프로젝트를 빌드, 테스트해보겠습니다!


CheckStyle



Checkstyle는 Java의 소스코드(.java파일)의 기술형식 코딩규약에 준하고 있는지를 체크하는 오픈소스의 정적해석 툴입니다.


먼저, Jenkins 관리 - 플러그인 관리에서 Checkstyle을 다운받아줍니다!


image



그리고 새로운 job을 생성해줍니다!


image




그리고 Build-Invoke top-level Maven targets 를 눌러 다음과 같이 추가해줍니다!


image



컴파일을 maven으로 하고 여태 빌드했던 걸 지우고 checkstyle로 실행한다는 것입니다!

그리고 빌드후 조치도 Checkstyle로 선택해줍니다!


image




한 번 Build Now를 해보죠!


image



앗 빌드를 실패 했습니다!


Console Output을 눌러보겠습니다!


image



maven source가 1.6버전인게 아무래도 오류인 듯 싶습니다!

pom.xml에서 maven source version을 1.8로 해주고


image



git push 해줍니다!


image



그런다음 다시 build now!


image



이번에는 제대로 빌드 되었습니다~!

하지만 Checkstyle Warnings이 무려 233개 !


image




코딩규약에 맞추라는 경고장입니다~ 탭을 쓰지말라고 하네요 ㅋㅋㅋㅋ


PMD



PMD란 Java, Javascript, PLSQL, 소스 상에 문제가 될 만한 것들을 찾아줍니다! 예를 들면 사용하지 않는 변수라던지 중복소스가 있다면 알려줍니다!

Checkstyle과 같이 Jenkins 관리 - 플러그인 관리에서 PMD를 다운받아줍니다!


image



그리고 역시 새로운 job을 만들어줍니다.


image




image




한 번 빌드해볼까요??


image



빌드는 제대로 되었구요 경고가 6개가 있네요! 아무래도 interface에 public 을 빼라는 경고 같습니다!

소스에서 인터페이스 메소드의 제어자를 다 빼고 git push 한다음 빌드하니~!


image



경고가 다 사라졌습니다! 웬만하면 PMD 경고는 모두 없애는 방향으로 코딩해야합니다!


jacoco & findbugs



jacoco는 얼마나 테스트가 충분한가를 나타내고, 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는지 숫자로 볼 수 있습니다!

findbugs는 코드의 잠재적 버그를 찾아줍니다!


아까와 같이 Jenkins 관리 - 플러그인 관리에서 jacoco와 findbugs를 다운받아줍니다!


image




그리고 새로운 job를 생성!


image




image




빌드해볼까요??


image




persistence 패키지에 있는 dao 는 UnitTest를 모두 작성해줘서 Coverage가 100% 이지만,

나머진 형편없네요 ㅋㅋㅋㅋㅋ UnitTest를 후에 다 만들어줘야겠어요!

TDD 방식을 사용해서 개발한다면 UnitTest를 미리 만들어 놓고 하기에 이런일은 없겠죠!

TDD 는 다음에 알아보도록 하겠습니다!