✅ Sonar를 프로젝트에 도입하기
💡프로젝트 CI 파이프라인에 Sonar 분석과정을 추가해보도록 하겠다. SonarCloud에서는 가이드라인을 제공해준다.
1️⃣ gradle에 sonar관련 설정 추가하기
플러그인 추가
plugins {
id "org.sonarqube" version "4.4.1.3373"
}
sonar 분석을 위한 properties 추가
sonar {
properties {
property "sonar.projectKey", "prgrms-be-devcourse_NBE1_2_Team03"
property "sonar.organization", "prgrms-be-devcourse"
property "sonar.host.url", "<https://sonarcloud.io>"
}
}
2️⃣ gradle에 Jacoco 관련 설정 추가하기
💡Jacoco란
Java 애플리케이션의 코드 커버리지(Code Coverage)를 측정하는 도구. 테스트 실행 시 소스 코드의 어느 부분이 테스트되었는지를 확인해서 이를 통해 얼마나 많은 코드가 테스트되고 있는지 파악할 수 있게 해준다.
jacoco 플러그인 추가
plugins {
id "jacoco"
}
jacoco 분석 report 관련 설정
def jacocoDir = layout.buildDirectory.dir("reports/")
jacocoTestReport {
dependsOn test
reports {
html.required.set(true)
xml.required.set(true)
csv.required.set(true)
html.destination jacocoDir.get().file("jacoco/index.html").asFile
xml.destination jacocoDir.get().file("jacoco/index.xml").asFile
csv.destination jacocoDir.get().file("jacoco/index.csv").asFile
}
}
tasks.named('test') {
useJUnitPlatform()
finalizedBy 'jacocoTestReport' // 해당 부분 추가
}
- dependsOn test: 테스트가 수행되어야만 분석이 이루어질 수 있도록
- reports: 분석 report를 받아볼 파일형식 및 파일이 저장될 위치를 지정 sonarCloud UI에 표시되려면 xml은 반드시 있어야 한다.
3️⃣ github secrets에 Sonar_TOKEN, GIT_TOKEN 추가
4️⃣ CI 파이프라인에 Sonar 분석 과정 추가
name: CI Pipeline
on:
push:
branches:
[ develop ]
pull_request:
branches:
[ develop ]
types:
[opened, synchronize, reopened]
jobs:
Continuous-Integration:
runs-on: ubuntu-latest
env:
# 환경변수 생략
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
with:
fetch-depth: 0 # 모든 커밋히스토리를 불러옴
- name: JDK 17 버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- uses: actions/setup-node@v3
with:
node-version: '20'
- name: SonarCloud 패키지 캐싱
uses: actions/cache@v4
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Gradle 캐싱
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: 빌드 권한 부여
run: chmod +x ./gradlew
shell: bash
- name: 빌드 및 테스트
run: ./gradlew build
- name: Sonarqube 분석
env:
GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew sonar --info**
- name: Sonarqube 분석
env:
GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew sonar --info
jacoco 실행 코드는 어디에?
💡 jacoco는 테스트 과정 이후 지정한 경로에 분석 report가 저장되는데
저장된 이후 ./gradlew sonar를 실행하면 알아서 해당 xml형식의 report를 찾아 sonarCloud에 해당 정보를 표시한다.
✅ 실행결과
PR과 연동되는 모습
링크 클릭시 더 자세히 볼 수 있음
문제를 수정하고 다시 푸시하면 분석을 다시 해줌
Jacoco를 통한 TestCoverage 확인
작성한 테스트가 현재 코드를 얼마나 커버하고 있는지를 확인할 수 있다.
✅ 참고자료
Jacoco 환경설정
'데브코스 > 실습 & 프로젝트' 카테고리의 다른 글
[2-3차 프로젝트] AOP & Slf4j를 통해 로깅 구현하기 (0) | 2024.11.03 |
---|---|
[2-3차 프로젝트] Sonar를 통해 코드 정적분석하기 - 3. SonarCloud 활용법 (0) | 2024.10.28 |
[2-3차 프로젝트] Sonar를 통해 코드 정적분석하기 - 1. SonarCloud 환경설정하기 (1) | 2024.10.28 |
[2-3차 프로젝트] 블루 - 그린 배포 과정 중 502 BadGateway 발생 해결 여정 (0) | 2024.10.28 |
[2-3차 프로젝트] 블루/그린 배포 방식으로 CI/CD 파이프라인 구축하기 - 2. CI/CD 파이프라인 구축 (0) | 2024.10.27 |