Infra/Jenkins

[Jenkins] Jenkins에 Jacoco 연동하기 (Spring 환경)

gakko 2024. 9. 11. 22:02

Jenkins signature

 

정적 분석 툴인 Jacoco를 CI/CD 과정에서 활용할 수 있습니다. 만약 Jenkins를 사용한다면 Jenkins 플러그인을 설치하고 간단한 스크립트만 작성하면 됩니다.

 

Spring 애플리케이션 Jacoco 설정

 

Jacoco 설정하기 (build.gradle & .kts)

Jacoco 자바코드의 커버리지를 체크할 때 사용하는 오픈소스 라이브러리이다. CI/CD와 연계해 테스트 커버리지를 충분히 채우지 못하면 배포가 되지 못하게 하는 등 구성원들에게 테스트 코드를

myvelop.tistory.com

 

  • 위 링크를 참고하면 Spring Application에서 Jacoco를 설정하는데 도움이 될 것입니다.
  • 참고로 Jenkins에서는 Jacoco를 해석할 때 xml 파일을 사용하기 때문에 아래와 같이 jacocoTestReport Task에서 xml.enabled를 true로 설정해줘야 합니다.
jacocoTestReport {
    dependsOn test
    reports {
        xml.enabled true
    }
}

 

 

 

Jenkins 플러그인 설치

  • Jenkins UI에서 플러그인을 설치하는 방법에 대해 설명하겠습니다.
  • 먼저 Jenkins UI 홈페이지에서 Jenkins 관리 메뉴를 클릭합니다.

jenkins menu

 

  • System Configuration > Plugins 를 클릭합니다.

jenkins system configuration

 

  • 좌측 메뉴에서 Available plugins를 선택합니다.

Jenkins available plugins

  • Jacoco를 검색하고, 선택해 Install 버튼을 클릭해줍니다.

jacoco plugins

  • 위의 과정을 거치면 일단 플러그인 설치는 완료입니다.

 

 

Jenkins Script 작성

 

JaCoCo

This plugin integrates <a href="http://www.eclemma.org/jacoco/trunk/index.html" target="_blank" rel="nofollow noopener noreferrer">JaCoCo code coverage reports</a> to Jenkins.

plugins.jenkins.io

  • 위 문서에 서술된 스크립트는 아래와 같습니다. 그러면 테스트를 위한 파이프라인을 하나 만들고, 이 스크립트를 사용해 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'
        )
      }
    }
  }
}

 

  • 적용하고 빌드를 실행해봅시다.
  • 파이프라인 페이지에 들어가면 아래와 같이 그래프를 그려줍니다.

jenkins jacoco graph

 

  • 빌드 상세 페이지에 들어가면 Overall Coverage Summary를 확인할 수 있습니다.
  • Test Result를 클릭하면 각 테스트에 대한 내용을 볼 수 있습니다.

build page

 

 

Blue Ocean 연동

Jenkins의 플러그인 중 하나인 Blue Ocean은 강력한 Visualization을 제공합니다. Jenkins 스크립트에 한 줄만 추가해줘도, Jacoco로 만든 테스트 리포트를 Blue Ocean에서 사용할 수 있습니다.

 

  • 아래와 같이 jacoco 리포트(XML 파일)을 전달하면 됩니다.
post {
  always {
    junit '**/build/test-results/test/*.xml'
  }
}

 

  • 파이프라인의 테스트를 확인해보면 아래와 같이 Blue Ocean UI에서도 Jacoco 테스트 리포트가 적용된 것을 확인할 수 있습니다.

blue ocean pipeline page