[Jenkins] 젠킨스 Pipeline 사용 실습: 스크립트, Jenkinsfile, 코드 커버리지
지난 글에 이어서, 이번 수업에서는 젠킨스에서 checkstyle을 활용한 정적 코드 분석에 대해 배웠다.
정적 코드 분석이란?
정적 코드 분석은 코드의 품질을 검사하여 잠재적인 버그를 발견하고, 코드 스타일과 일관성을 유지하기 위해 사용된다. 이를 통해 가독성을 높이고 유지보수성을 향상시킬 수 있다. 대표적인 도구로는 Checkstyle, FindBugs, PMD 등이 있다.
1. Checkstyle 주요 기능
Checkstyle은 Java 프로젝트에서 코드 스타일 검사를 통해 팀 내 코딩 규칙 준수를 돕는다. 주요 기능은 다음과 같다:
- 코딩 표준 강제: 특정 규칙에 맞지 않는 코드 경고
- 불필요한 코드 제거: 사용되지 않는 변수, 메서드 등을 식별
- 일관된 코드 포맷 유지: 팀의 코딩 컨벤션에 따른 코드 작성 보장
2. Checkstyle 설정 및 사용법
Checkstyle은 Java 프로젝트의 코드 스타일을 검사하여 팀 내 코딩 규칙 준수 여부를 확인하는 도구이다.
이번 실습에서는 Checkstyle을 활용하여 정적 코드 분석을 수행하는 방법을 익혔다.
공식 Document: https://checkstyle.sourceforge.io/config.html
checkstyle – Configuration
Content Overview A Checkstyle configuration specifies which modules to plug in and apply to Java source files. Modules are structured in a tree whose root is the Checker module. The next level of modules contains: File Set Checks - modules that take a set
checkstyle.sourceforge.io
이전에 만들었던 스프링부트 웹 프로젝트에 이어서 진행하도록 하겠다.
1) 플러그인 추가
build.gradle 파일의 plugins에 checkstyle 추가하여 프로젝트에 적용한다.
id 'checkstyle'
naver의 체크 스타일 환경 설정 샘플
https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-checkstyle-rules.xml
2) 환경설정
환경 설정은 config/checkstyle/checkstyle.xml 파일로 설정한다.
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="TreeWalker">
<module name="ConstantName"/>
</module>
</module>
build.gradle 파일에 설정 파일 경로를 등록해줘야 한다.
checkstyle {
toolVersion = '10.12.1' // 사용하는 Checkstyle 버전에 맞춰 설정
configFile = file('config/checkstyle/checkstyle.xml')
}
실행
로컬에서 다음 명령어를 실행한다.
./gradlew checkstyleMain
⛔️ 에러 발생 및 해결
빌드가 실패하면서 이런 에러메시지가 떴다.
* What went wrong:
Execution failed for task ':checkstyleMain'.
> A failure occurred while executing org.gradle.api.plugins.quality.internal.CheckstyleAction
> An unexpected error occurred configuring and executing Checkstyle.
> Unable to create Root Module: config {/Users/iyeonsu/Documents/GitHub/calculator/config/checkstyle/checkstyle.xml}.
IntelliJ IDEA에서 Checkstyle을 사용하려면 올바른 DTD URI가 등록되어야 한다.
이 오류는 Checkstyle의 DTD URI가 제대로 등록되지 않았을 때 발생할 수 있다.
1. IDE 설정에서 DTD URI 등록
- IDE 설정 열기:
- Preferences (macOS) 또는 Settings (Windows/Linux)로 이동한다.
- macOS의 경우, `command+,` 로 이동할 수 있다.
- Languages & Frameworks > Schemas and DTDs로 이동:
- Languages & Frameworks → Schemas and DTDs로 들어간다.
- DTD 추가:
- 이 화면에서 + 버튼을 클릭하여 새로운 DTD URI를 등록할 수 있다.
- Checkstyle DTD URI 등록:
- 적용 후 저장:
- 설정 후 Apply를 클릭하고 OK 버튼을 눌러 변경 사항을 저장한다.
캐시 삭제 후 빌드
./gradlew clean
./gradlew checkstyleMain
정적 코드 분석 스테이지 추가
Jenkinsfile에 정적 코드 분석 스테이지를 추가한다.
stage("Static Code Analysis"){
steps{
sh "./gradlew checkstyleMain"
publishHTML(target: [
reportDir: 'build/reports/checkstyle/',
reportFiles: 'main.html',
reportName: 'Checkstyle Report'
])
}
}
플러그인 추가
정적 코드 분석 리포트를 html 파일로 퍼블리싱하기 위해서는 다음의 플러그인을 추가해야 한다.
Jenkins 관리 > Plugins > Available plugins 에서 html을 검색하여 HTML Publisher과 JaCoCo 플러그인을 추가한다.
Checkstyle Report 확인
빌드를 해서 성공하면, checkstyle Report를 확인할 수 있다.
Checkstyle Report를 클릭하면, 다음과 같은 html 페이지로 결과를 확인할 수 있다.
이렇게 checkstyle을 활용한 정적 코드 분석에 대해 알아보았다.
여기서 더 나아가, checkstyle보다 sonarqube가 더 많이 사용되므로 sonarqube로 사용을 해보는 것이 좋다고 한다.