SonarQube를 Docker로 설치하는 방법은 아래 포스트를 참고해주세요.
중요해서 볼드체로 표시합니다.
이전 포스트에도 설명되어 있는 부분이지만, Java 8을 분석해야 한다면 꼭 8.9.0버전 이하의 소나큐브를 다운받으셔야 합니다. Java 8 이후의 버전은 latest 버전의 소나큐브를 다운받아주시면 됩니다.
이런 실정이라... 저는 Java 8과 Java 17 버전이 모두 존재하는 회사 솔루션들을 검증하느라 8.9.0 버전과 latest 버전의 소나큐브 컨테이너를 둘다 만들었습니다. ㅠ
0. 코드 분석 사전 준비
(1) 메인에서 Add Project 버튼 클릭하여 새로운 프로젝트 생성
(2) Project key (나중에 환경 변수로 쓰임)와 SonarQube에 보여질 이름 결정
(3) 생성할 token의 이름을 정하고 버튼을 누르면 토큰이 생성됨(나중에 환경 변수로 쓰임)
(4) 여기까지 했다면 프로젝트 생성이 완료되고 입력한 정보에 따른 환경 변수 정보를 볼 수 있음
1. Java 8 정적 분석 방법
(1) build.gradle에 환경 변수 추가
plugins {
id 'org.sonarqube' version '3.0'
}
sonarqube {
properties {
property "sonar.projectKey", "projectKey 입력"
property "sonar.host.url", "http://192.168.0.44:83"
property "sonar.login", "생성되었던 토큰 입력"
}
}
(2) 터미널 > 프로젝트 루트 폴더에서 ./gradlew sonar
1.1. Java 8에서 코드 커버리지 분석 방법
- Jacoco: 코드 커버리지 분석을 위해 필요한 라이브러리
(1) build.gradle에 환경 변수 추가
plugins {
id 'jacoco'
}
sonarqube {
properties {
property "sonar.tests", "src/test/java"
property "sonar.coverage.jacoco.xmlReportPaths", "${buildDir}/reports/jacoco/test/jacocoTestReport.xml"
property "sonar.java.binaries", "${buildDir}/classes"
property "sonar.test.inclusions", "**/*Test.java"
}
}
(2) Jacoco 라이브러리를 통해 만들어진 xml로 커버리지를 분석하므로 xml report를 만들도록 설정
test {
useJUnitPlatform()
finalizedBy 'jacocoTestReport'
}
jacoco {
toolVersion = '0.8.5'
}
jacocoTestReport {
reports {
html.enabled true
xml.enabled true
csv.enabled false
}
(3) 터미널 > 프로젝트 루트 폴더에서 ./gradlew test 하면 xml 생성됨
(4) ./gradlew sonar
2. Kotlin(Java 17) 정적 분석 및 커버리지 분석 방법
(1) build.gradle.kts에 세팅
plugins {
id("org.sonarqube") version "4.2.1.3168"
id("jacoco")
}
tasks.withType<Test> {
useJUnitPlatform()
finalizedBy("jacocoTestReport")
}
sonarqube {
properties {
property("sonar.projectKey", "projectKey 입력")
property("sonar.projectName", "project이름 입력")
property("sonar.host.url", "http://192.168.0.44:84")
property("sonar.token", "생성되었던 토큰 입력")
property("sonar.tests", "src/test/kotlin")
property("sonar.coverage.jacoco.xmlReportPaths", "${buildDir}/reports/jacoco/test/jacocoTestReport.xml")
property("sonar.java.binaries", "${buildDir}/classes")
property("sonar.test.inclusions", "**/*Test.kt")
}
}
jacoco {
toolVersion = "0.8.8"
}
tasks.jacocoTestReport {
reports {
html.required.set(true)
xml.required.set(true)
csv.required.set(false)
}
}
(2) Gradle Tasks를 1, 2순으로 클릭하여 명령어 실행
(1: Jacoco 리포트 파일 생성, 2: SonarQube 정적 분석)
3. JavaScript(+TypeScript) 정적 분석 방법
(1) 터미널에서 npm install sonarqube-scanner --save-dev 명령어로 설치
(2) 프로젝트 루트 경로에 report.js 파일을 만들고, 이 파일에 환경 변수 추가
const sonarqubeScanner = require("sonarqube-scanner");
sonarqubeScanner(
{
options: {
"sonar.projectKey": "projectKey 입력",
"sonar.host.url": "http://192.168.0.44:83",
"sonar.login": "생성되었던 토큰 입력"
}
},
() => process.exit()
)
module.exports = sonarqubeScanner;
(3) package.json에 report.js 등록
"scripts": {
"sonar": "node report.js"
}
(4) 터미널에서 npm run sonar 로 실행
3-1. JavaScript(+TypeScript)에서 코드 커버리지 분석 방법
(1) ng test --code-coverage 명령어를 통해 lcov.info 파일 생성
(2) report.js 파일에 lcov.info 파일의 경로를 환경 변수로 추가
sonarqubeScanner(
{
options: {
"sonar.javascript.lcov.reportPaths": "/coverage/프로젝트명/lcov.info"
}
},
(3) npm run sonar
'IT > 기타' 카테고리의 다른 글
[SonarQube] New Code, Overall Code란? (0) | 2023.09.01 |
---|---|
[SonarQube] 정적 분석 결과 해석하기 (0) | 2023.09.01 |
[Docker] 도커 이미지(Image) 다운로드 및 컨테이너(Container) 생성/실행/삭제하기(feat. SonarQube) (0) | 2023.08.13 |
[Docker] 도커의 개념, linux에서 도커 설치 (0) | 2023.08.12 |
[Oracle, Eclipse] - Apache Tomcat을 이용해 웹 화면 구성 (0) | 2023.07.11 |