Jenkins는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 CI툴이다.
CI는 Continuous Integration. 즉, 지속적인 통합이라는 의미를 가진다.
지속적인 통합이란, 애플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 Repository에 통합히는 것을 의미한다.
이러한 CI의 핵심 목표는 버그를 신속하게 찾아 해결하고, 소프트웨어의 품질을 개선하고, 새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것에 있다.
코드의 변경과 함께 이뤄지는 이 같은 자동화된 빌드와 테스트 작업들은 다음과 같은 이점들을 가져다 준다.
Jenkins 설치 전 준비물
💡 Jenkins 버전 별로 호환되는 openjdk 가 각기 다르다.
가장 최신 버전(v2.361)은 Java 11 또는 17 지원
→ Java 8을 지원하는 가장 최신 버전을 설치하는 것을 권장
Jenkins version : 2.346.1 (2022/06)
java -jar jenkins.war 명령어 실행




Jenkins 관리 > 플러그인 관리 > 설치 가능 탭에서 검색 후 설치
Jenkins에서 지원하는 플러그인이 많지만 내가 실제로 적용했던 플러그인만 업급하겠다.
Subversion - Jenkins에 Subversion 지원Deploy to Container - war파일을 가져와 빌드 종료 시 실행 중인 원격 애플리케이션 서버에 배포Maven Integration - Jenkins와 Maven 간의 긴밀한 통합을 제공Warnings Next Generation - 정적 분석 도구(PMD, Checkstyle, Findbugs 등)에서 보고된 컴파일 경고 또는 문제를 수집하고 결과를 시각화해 보여주는 플러그인젠킨스 관리 > Global Tool Configuration 으로 이동
Install automatically 체크해 Maven version을 선택하면 Jenkins가 자동으로 Apache에서 Maven을 설치함
Dashboard > 새로운 Item 선택Maven Project 선택 및 프로젝트 명 작성 후 OK 클릭
../jenkins/workspace 로 잡힘)
Credentials - Add 버튼 클릭해 본인의 SVN 계정을 등록Username : SVN username 입력Password : SVN password 입력ID : 원하는 Credential 이름 입력젠킨스 관리 > Manage Credentials > Add Credentials 에서도 등록 가능

Poll SCM 체크 후, Schedule 입력 칸에 소스 변경 감지 주기를 입력H/30 * * * * 으로 입력하면 매 시 30분마다 변경 감지
Root POM 에 pom.xml 의 경로를 입력../.jenkins/workspace/프로젝트 폴더) 가 아닌 다른 경로에 위치할 경우, 작업 공간을 기준으로 상대 경로 입력Goals and Option 에 수행할 Maven 명령어를 입력clean : 컴파일된 결과물인 target 폴더 제거install : target 폴더 하위에 war 파일 생성pmd:pmd : pmd 분석을 수행하고 위반에 대한 보고서를 생성pmd:cpd : cpd(복사/붙여넣기 감지기) 도구에 대한 보고서를 생성findbugs:findbigs : findbugs 분석을 수행하고 위반에 대한 보고서를 생성checkstyle:checkstyle : checkstyle 분석을 수행하고 위반에 대한 보고서를 생성
빌드 후 조치 추가 - Record compiler warnings and static analysis results 선택Add Tool 클릭해 **PMD**, **CheckStyle**, FindBugs 를 각각 추가Report File Pattern : 분석 결과 보고서의 위치를 입력Report Encoding : 보고서의 내용을 인코딩할 타입 선택 (UTF-8)Custom ID : 분석 도구의 ID 입력Custom Name : 분석 도구의 이름 입력
빌드 후 조치 추가 - Deploy war/ear to container를 선택Add Container 클릭해 알맞은 Tomcat 버전 선택WAR/EAR files : 배포할 war 파일을 file 패턴으로 입력Context path : 배포할 war 파일 생성 경로 (Tomcat 루트 경로 기준)Credentials : 배포할 Tomcat 서버의 user를 선택젠킨스 관리 > Manage Credentials > Add Credentials 에서 미리 등록 가능배포할 서버의 Tomcat 디렉토리/conf/tomcat-users.xml 에 user 정보를 등록
Tomcat URL : 배포 서버 URL 입력
위의 모든 구성을 끝내고 저장 버튼을 클릭해 프로젝트(Job)를 생성

지금 빌드 버튼을 클릭해 빌드 실행빌드가 완료된 프로젝트(Job)는 빌드 회차 별로 CheckStyle, FindBugs, PMD 와 같은 분석 도구로 소스를 분석한 결과를 확인할 수 있다.
Severities Distribution ? 심각도 분포
Reference Comparison ? 이전 빌드 회차의 결과를 참조해 비교
Hsitory ? 전 회차 분석 결과 그래프
Details ? 분석 도구 별, 패키지 별, 파일 별, 보고된 타입 별 세부 정보
Jenkins로 애플리케이션 빌드 시에 직접 겪은 Exception 중 Tomcat과 관련된 이슈를 정리해보았다.
해당 Exception은 Tomcat 설정과 관련된 Exception이다.
일반적으로 Tomcat 서버에서 애플리케이션을 배포하기 전 server.xml 설정 파일을 수정해 Tomcat의 Context Path와 docBase를 지정한다.
Jenkins에서는 바로 이 설정으로 인해 애플리케이션 빌드 시 문제가 발생한다.
Jenkins에서는 프로젝트 구성에 설정된 context path를 참고해 새롭게 정의하고 war파일과 war파일을 압축 해제한 폴더를 생성한다. 그런데, server.xml에 이미 정의가 되어있기 때문에 충돌이 발생하는 것이다.
따라서 위와 같은 Exception 발생 시에 server.xml 에서 직접 지정한 context path를 지워주면 Exception을 간단하게 처리할 수가 있다.
위에서 볼 수 있다시피 “Tomcat Manager 사용에 허용되지 않은 Tomcat user” 라고 Exception 로그가 기록되어 있다.
해당 문제를 해결하려면, Catalina Home Path/webapps/manager/META-INF 하위에 위치한 context.xml 설정 파일을 수정해줘야 한다. 파일을 열어보면 아래와 같이 명시된 특정 아이피의 접근만 허용하는 설정을 확인할 수 있다.

해당 부분을 주석 처리 해주고 저장한 뒤, 다시 Jenkins로 빌드하면 해당 Exception이 발생하지 않고 정상적으로 빌드 되는 것을 확인할 수 있다.
Maven Integration 플러그인 설치하실때 Jenkins version 관련 이슈 없으셨나요?
2.346.1 버전에 대응하는 Maven Integration 플러그인 설치시 부가적으로 자동 설치되는(?) 플러그인들은 상위버전에 대응하는 것들이라 에러가 발생하더라구요.
도움주시면 너무너무 감사하겠습니다!!