본문 바로가기
Jenkins

Sonar 연동

by 타블로 2019. 8. 10.

- sonarqube-7.2.1

- sonar-scanner-cli-3.0.3.778-windows

 

1. 플러그인 설치

- Gradle plugin

- SonarQube Scanner for Jenkins

 

2. 설정 변경

 

 

3. 아이템 추가

 

[단일 프로젝트]

sonar.login=admin
sonar.password=admin
sonar.host.url=http://localhost:9000

sonar.sources=src/main/java  
sonar.tests=src/test/java

sonar.java.binaries=build/classes
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.projectKey=sonarqube

sonar.java.libraries=C:/lombok-1.18.8.jar

sonar.java.source=1.8

=======================================================

[복합 프로젝트 - Module이 여러개(Intellij 기준)]

sonar.login=admin  
sonar.password=admin  
sonar.host.url=http://localhost:9000  
sonar.sources=[PROJECT_NAME]/src/main/java  
sonar.tests=[PROJECT_NAME]/src/test/java 
sonar.java.binaries=[PROJECT_NAME]/build/classes 
sonar.projectVersion=1.0  
sonar.sourceEncoding=UTF-8  

sonar.projectKey=[PROJECT_NAME]

sonar.java.source=1.8

 

 

※ [PROJECT_NAME]/out/production/classes 수동 추가. 빌드 스크립트에 추후 수정 

   빌드 중 에러 -> [ROOT_PROJECT_NAME]/target/surefire-reports 생성

=========================================================

// SOURCE

sonar.sources=src/main/java
sonar.inclusions=src/main/java

// TEST
sonar.tests=src/test/java
sonar.test.inclusions=src/test/java

// BINARY-SOURCE
sonar.java.binaries=build/classes

// LIBRARY

sonar.java.libraries=C:/Users/[WINDOW계정]/.m2/**/*.jar

sonar.java.libraries=C:/[MAVEN 또는 GRADLE JAR파일]/lombok-1.18.8.jar

// JACOCO

sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPaths=build/jacoco/jacoco-ut.exec

=========================================================

- sonar.coverage.exclusions=**/*.java // 코드 커버리시 제외

 

4. Sonarqube 플러그인 업데이트(필수)

- Sonarjava[5.6 (build 15032)] 설치

- Java로 검색 -> 모두 설치

: lombok 등으로 적용된 부분이 code smell에 걸리는 경우가 있음.

 ex)

@NoArgsConstructor(access = PRIVATE)
public final class TransformerUtil {

    public static OutDto transform(ApiVo vo) {
        return Optional.ofNullable(vo)
                .map(item -> OutDto.builder()
                        .build()
                ).orElse(null);
    }

    public static Dto transform(Vo vo) {
        return Optional.ofNullable(vo)
                .map(item -> Dto.builder()
                        .build()
                ).orElse(null);
    }
}