정적 분석 툴인 Jacoco를 CI/CD 과정에서 활용할 수 있습니다. 만약 Jenkins를 사용한다면 Jenkins 플러그인을 설치하고 간단한 스크립트만 작성하면 됩니다.
Spring 애플리케이션 Jacoco 설정
- 블로그 글 링크: https://myvelop.tistory.com/215
- 위 링크를 참고하면 Spring Application에서 Jacoco를 설정하는데 도움이 될 것입니다.
- 참고로 Jenkins에서는 Jacoco를 해석할 때 xml 파일을 사용하기 때문에 아래와 같이 jacocoTestReport Task에서 xml.enabled를 true로 설정해줘야 합니다.
jacocoTestReport {
dependsOn test
reports {
xml.enabled true
}
}
Jenkins 플러그인 설치
- Jenkins UI에서 플러그인을 설치하는 방법에 대해 설명하겠습니다.
- 먼저 Jenkins UI 홈페이지에서 Jenkins 관리 메뉴를 클릭합니다.
- System Configuration > Plugins 를 클릭합니다.
- 좌측 메뉴에서 Available plugins를 선택합니다.
- Jacoco를 검색하고, 선택해 Install 버튼을 클릭해줍니다.
- 위의 과정을 거치면 일단 플러그인 설치는 완료입니다.
Jenkins Script 작성
- jacoco-plugin docs: https://plugins.jenkins.io/jacoco/
- 위 문서에 서술된 스크립트는 아래와 같습니다. 그러면 테스트를 위한 파이프라인을 하나 만들고, 이 스크립트를 사용해 jacoco 분석 툴을 적용해보도록 하겠습니다.
post {
success {
jacoco(
execPattern: '**/build/jacoco/*.exec',
classPattern: '**/build/classes/java/main',
sourcePattern: '**/src/main'
)
}
}
- git 주소로부터 프로젝트를 가져옵니다. (Jenkins의 Git 플러그인 사용)
- 그리고 Gradle 명령어를 사용해 jacocoTestReport Task를 실행해줍니다. 위에 설명된 jacoco의 애플리케이션 설정을 보면 dependsOn test가 걸려 있기 때문에 테스트가 된 후, jacoco의 리포트가 생성됩니다.
- 테스트가 실패했을 때도 분석 결과를 보기 위해 always로 적어줬습니다.
pipeline {
agent any
stages {
stage('Test') {
steps {
git branch: '${SOURCE_BRANCH}', credentialsId: 'credentialsId', url: 'git주소'
sh './gradlew jacocoTestReport'
}
}
post {
always {
jacoco(
execPattern: '**/build/jacoco/*.exec',
classPattern: '**/build/classes/java/main',
sourcePattern: '**/src/main'
)
}
}
}
}
- 적용하고 빌드를 실행해봅시다.
- 파이프라인 페이지에 들어가면 아래와 같이 그래프를 그려줍니다.
- 빌드 상세 페이지에 들어가면 Overall Coverage Summary를 확인할 수 있습니다.
- Test Result를 클릭하면 각 테스트에 대한 내용을 볼 수 있습니다.
Blue Ocean 연동
Jenkins의 플러그인 중 하나인 Blue Ocean은 강력한 Visualization을 제공합니다. Jenkins 스크립트에 한 줄만 추가해줘도, Jacoco로 만든 테스트 리포트를 Blue Ocean에서 사용할 수 있습니다.
- 아래와 같이 jacoco 리포트(XML 파일)을 전달하면 됩니다.
post {
always {
junit '**/build/test-results/test/*.xml'
}
}
- 파이프라인의 테스트를 확인해보면 아래와 같이 Blue Ocean UI에서도 Jacoco 테스트 리포트가 적용된 것을 확인할 수 있습니다.