Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


By SonarSource – GNU LGPL 3 – Issue Tracker  Sources 

SonarQube Scanner for Gradle 2.6.1 – Compatible with SonarQube 5.6+ (LTS)


Panel
borderColor#C3CCD7
bgColor#FCFCFC

Table of Contents

Table of Contents
maxLevel3
indent16px


기능

SonarQube Scanner for Gradle를 사용하면 손쉽게 Gradle 프로젝트를 분석할 수 있습니다.

일반적인 Gradle task에서 SonarQube 분석을 수행할 수 있기 때문에, gradle을 사용할 수 있는 모든 환경(개발 빌드, CI server 등)에서 별도의 수작업(다운로드, 셋업, SonarQube Scanner 설치 등) 없이 분석이 가능합니다. Gradle 빌드에서 생성되는 정보들로 SonarQube 분석을 수행하기에 충분합니다. 해당 정보들을 기반으로 분석을 위한 설정 작업을 수행하기 때문에, 수작업을 통한 환경 설정이 현저하게 줄어듭니다.

호환성

SonarQube Scanner for Gradle v2.x는 Gradle v1.12+ 및 SonarQube v5.6+과 호환됩니다.

Java 프로젝트 및 Android 프로젝트를 분석하는 경우, javac로 컴파일 된 바이트코드가 필요합니다.

Warning
titleSonarQube Scanner for Gradle 1.x 사용자는 어떻게 하나요?

unicity를 보장하기 위해 SonarQube Scanner for gradle v2.0에서 모듈 키 생성 정책을 변경하였습니다(SONARGRADL-12 - Avoid duplicate module keys CLOSED 참조). v1.x에서 v2.x로 업그레드하는 경우, 모든 이슈들이 "new"로 다시 식별될 수 있습니다. 다음 워크플로우를 따라 해당 현상을 방지할 수 있습니다:

  • 권장사항: 만일을 대비해 SonarQube 데이터베이스를 백업합니다
  • module key update 기능을 사용해 모든 모듈(root 모듈 제외)의 키를 다음 패턴에 따라 변경합니다: <root module key>:<module path>. 주의: <root module key>는 변경되지 않으며, [<group>:]<name>과 동일해야 합니다.
  • build.gradle의 SonarQube 플러그인 버전을 2.x로 업데이트 합니다.
  • 분석을 수행합니다.
  • Issue 이력이 보존되어 있는지 확인합니다.

사전 조건

  • SonarQube 서버를 설치합니다.
  • SonarQube 서버가 사용할 Java 버전을 하나 이상 설치합니다.
  • 분석 언어 플러그인을 설치합니다.
  • 소스 코드 분석하기를 숙지합니다.

스캐너 설정

설치는 자동 수행되지만, 몇가지 글로벌 속성은 사용자가 직접 설정해야 합니다. 글로벌 속성은  ~/.gradle/gradle.properties에서 설정할 수 있습니다. 모든 속성은 System 속성이므로, systemProp prefix를 사용해야 합니다.

Code Block
titlegradle.properties
systemProp.sonar.host.url=http://localhost:9000
 
#----- Security (when 'sonar.forceAuthentication' is set to 'true')
systemProp.sonar.login=<token>

분석

1 - 빌드에서 스캐너 활성화

Gradle 2.1+:

Code Block
titlebuild.gradle
plugins {
  id "org.sonarqube" version "2.6"
}

보다 자세한 내용은 https://plugins.gradle.org/plugin/org.sonarqube를 참조합니다.

로컬 SonarQube 서버가 정상적으로 설치되고 실행된 상태라고 가정합니다. 별도로 추가 설정을 할 필요는 없습니다.

2 - 분석 실행

gradle sonarqube 명령어를 실행합니다. 분석이 완료되면 로그 하단에 표시되는 웹페이지에서 결과를 확인할 수 있습니다. 별도의 작업이 분석 결과를 정상 확인할 수 있어야 합니다.

분석 속성 설정하기

SonarQube Scanner for Gradle은 Gradle의 객체 모델에 포함된 정보를 활용해 SonarQube 표준 속성을 설정합니다. 기본 속값은 아래 테이블에 표시되어 있습니다.

표준 SonarQube 속성 Gradle 기본값

PropertyGradle default
sonar.projectKey

[${project.group}:]${project.name} for root module

<root module key>:<module path> for submodules 

sonar.projectName
${project.name}
sonar.projectDescription
${project.description}
sonar.projectVersion
${project.version}
sonar.projectBaseDir
${project.projectDir}
sonar.working.directory
${project.buildDir}/sonar

추가 속성의 기본값은 java-base 혹은 java 플러그인이 적용된 프로젝트에 한해 제공합니다:

Java 프로젝트에 대한 추가 속성의 Gradle 기본값

PropertyGradle dafault
sonar.sourceEncoding
${project.compileJava.options.encoding}
sonar.java.source
${project.sourceCompatibility}
sonar.java.target
${project.targetCompatibility}
sonar.sources
${sourceSets.main.allSource.srcDirs} (filtered to only include existing directories)
sonar.tests
${sourceSets.test.allSource.srcDirs} (filtered to only include existing directories)
sonar.java.binaries
${sourceSets.main.output.classesDir}
sonar.java.libraries
${sourceSets.main.compileClasspath} (filtering to only include files; rt.jar and jfxrt.jar added if necessary)
sonar.java.test.binaries
${sourceSets.test.output.classeDir}
sonar.java.test.libraries
${sourceSets.test.compileClasspath} (filtering to only include files; rt.jar and jfxrt.jar added if necessary)
sonar.junit.reportPaths
${test.testResultsDir} (if the directory exists)

Groovy 프로젝트에 대한 추가 속성의 Gradle 기본값

Java 프로젝트의 추가 속성에 다음 속성이 추가됩니다:

PropertyGradle default
sonar.groovy.binaries
${sourceSets.main.output.classesDir}

JaCoCo 플러그인 적용시, 추가 속성의 Gradle 기본값

PropertyGradle default
sonar.jacoco.reportPaths${jacoco.destinationFile}
sonar.groovy.jacoco.reportPath${jacoco.destinationFile}

Android 프로젝트에 대한 추가 속성의 Gradle 기본값
(com.android.application, com.android.library 혹은 com.android.test)

기본적으로 "debug" 타입의 첫 번쨔 variant를 활용해 분석 환경을 설정합니다. variant를 지정하고자 하는 경우, androidVariant 파라미터를 사용합니다:

Code Block
languagebash
titlebuild.gradle
sonarqube {
    androidVariant 'fullDebug'
}


PropertyGradle default

sonar.sources (for non test variants)

${variant.sourcesets.map} (ManifestFile/CDirectories/AidlDirectories/AssetsDirectories/CppDirectories/JavaDirectories/RenderscriptDirectories/ResDirectories/ResourcesDirectories)

sonar.tests (for test variants)

${variant.sourcesets.map} (ManifestFile/CDirectories/AidlDirectories/AssetsDirectories/CppDirectories/JavaDirectories/RenderscriptDirectories/ResDirectories/ResourcesDirectories)
sonar.java[.test].binaries${variant.destinationDir}
sonar.java[.test].libraries${variant.javaCompile.classpath} + ${bootclasspath}
sonar.java.source${variant.javaCompile.sourceCompatibility}
sonar.java.target${variant.javaCompile.targetCompatibility}

수동으로 속성 파라미터 및

기본값

속성값 설정하기

Gradle 프로젝트 및 하위프로젝트에 SonrQubeExtention 확장어를 추가해 분석 파라미터를 설정/오버라이딩 할 수 있습니다:

Code Block
languagebash
titlebuild.gradle
sonarqube {
    properties {
        property "sonar.exclusions", "**/*Generated.java"
    }
}

속성 파라미터 및 속성값은 커맨드 라인에서도 입력할 수 있습니다. 더 자세한 정보는 "Configuring properties from the command line"를 참조합니다.

멀티 프로젝트 빌드 분석하기

계층구조를 가진 프로젝트를 분석하고자 하는 경우, SonarQube 플러그인은 해당 계층의 루트 프로젝트에 적용해야합니다. 일반적으로(꼭 그런것은 아니지만), 이 위치가 Gradle 빌드의 루트 프로젝트가 됩니다.