/
Analyzing with SonarQube Scanner for Jenkins

Analyzing with SonarQube Scanner for Jenkins

By SonarSource – GNU LGPL 3 – Issue Tracker  Sources

SonarQube Scanner for Jenkins 2.6.1 

Table of Contents

๊ธฐ๋Šฅ

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด Jenkins ๊ธ€๋กœ๋ฒŒ ํ™˜๊ฒฝ ์„ค์ •์—์„œ SonarQube ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ดํ›„ ํ‘œ์ค€ Jenkins Build Step์œผ๋กœ SonarQube ๋ถ„์„์„ ๋‹ค์Œ Scanner๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Jenkins์˜ job์ด ์™„๋ฃŒ๋˜๋ฉด, ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ SoanrQube ๋ถ„์„ ์—ฌ๋ถ€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  job ํŽ˜์ด์ง€์—  SonarQube  ๋ฐฐ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฐฐ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด SonarQube ๋Œ€์‹œ๋ณด๋“œ๋กœ ์ด๋™ํ•ด quality gate ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SINCE 2.5 : Jenkins Pipeline DSL ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ผ๋ถ€ ๊ธฐ๋Šฅ์€ SonarQube v6.2 ์ด์ƒ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค).

ํ˜ธํ™˜์„ฑ ๋งคํŠธ๋ฆญ์Šค

SonarQube Scanner for Jenkins2.12.2.12.32.42.5 - 2.6
Jenkins1.491+1.580.1+1.587+1.587+1.651+

SINCE 2.5 JRE8 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

์„ค์น˜ํ•˜๊ธฐ

  1. Jenkins ์—…๋ฐ์ดํŠธ ์„ผํ„ฐ์—์„œ SonarQube Scanner for Jenkins ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. SonarQube  ์„œ๋ฒ„๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:
    1. ๊ด€๋ฆฌ์ž๋กœ ๋กœ๊ทธ์ธ ํ›„ Manage Jenkins > Configure System ํ•ญ๋ชฉ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    2. SonarQube configuration ์„น์…˜์—์„œ Add SonarQube๋ฅผ ํด๋ฆญํ•œ ํ›„, ํ•„์š”ํ•œ ์„ค์ •๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•˜๊ธฐ

SonarQube ์Šค์บ๋„ˆ๋กœ ๋ถ„์„ํ•˜๊ธฐ

Global Configuration

SonarQube Scanner๋ฅผ ์‚ฌ์šฉํ•ด SonarQube ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด, ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋“œ์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋งŒํผ์˜ ์Šค์บ๋„ˆ๋ฅผ ์„ค์ •ํ•œ ๋’ค, ๊ฐœ๋ณ„ Jenkins job์—์„œ ์›ํ•˜๋Š” ๋Ÿฐ์ฒ˜๋ฅผ ์„ ํƒํ•ด SonarQube ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. Jenkins์—  administrator ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•œ ๋’ค, Manage Jenkins > Global Tool Configuration ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. SonarQube Scanner ์„ค์ • ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ ๋’ค, Add SonarQube Scanner๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ  Jenkins ๋„๊ตฌ๋ฅผ ์ž๋™์„ค์น˜ํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์น˜ํ•œ Scanner๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜('Install automatically' ์ฒดํฌ ๋ฐ•์Šค ํ•ด์ œ) Jenkins๊ฐ€ ํŠน์ • ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค('Install automatically' ์ฒดํฌ ๋ฐ•์Šค ์„ ํƒ).

Jenkins๊ฐ€ ์—…๋ฐ์ดํŠธ ์„ผํ„ฐ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(๊ธฐ๋ณธ์ ์œผ๋กœ 1์ผ์— 1ํšŒ ๋‹ค์šด๋กœ๋“œ)์—๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ SonarQube Scanner ๋ฒ„์ „์„ ๋ฆฌ์ŠคํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Manage Plugins > Advanced ํƒญ์—์„œ 'Check Now' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ๊ฐ•์ œ๋กœ ์—…๋ฐ์ดํŠธ ์„ผํ„ฐ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Job Configuration

  1. Job > Configure > Build ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋นŒ๋“œ ์Šคํ…์— SonarQube Scanner๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  3. SonarQube ๋ถ„์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด sonar-project.properties ํŒŒ์ผ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, Analysis properties ํ•„๋“œ์— ๋ถ„์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SonarQube Scanner for MSBuild๋กœ ๋ถ„์„ํ•˜๊ธฐ

Global Configuration

SonarQube Scanner for MSBuild๋ฅผ ์‚ฌ์šฉํ•ด SonarQube ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด, ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋“œ์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋งŒํผ์˜ ์Šค์บ๋„ˆ๋ฅผ ์„ค์ •ํ•œ ๋’ค, ๊ฐœ๋ณ„ Jenkins job์—์„œ ์›ํ•˜๋Š” ๋Ÿฐ์ฒ˜๋ฅผ ์„ ํƒํ•ด SonarQube ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Jenkins์— administrator ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•œ ๋’ค, Manage Jenkins > Global Tool Configuration ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. Add SonarQube Scanner for MSBuild๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ค์น˜ ๋ฒ„์ „์„ ์ถ”๊ฐ€์‚ฝ๋‹ˆ๋‹ค. Install automatically์— ์ฒดํฌํ•˜๋ฉด Jenkins executor๊ฐ€ SonarQube Scanner for MSBuild์˜ ํ•ด๋‹น ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค. Install from GitHub์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, Manage Jenkins > Manage Plugins > Advanced๋กœ ์ด๋™ํ•ด Check now๋ฅผ ๋จผ์ € ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.

Job Configuration

  1. Job > Configure > Build ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋นŒ๋“œ ์Šคํ…์— SonarQube for MSBuild - Begin Analysis ๋ฐ SonarQube for MSBuild - End Analysis๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  3. SonarQube Scanner for MSBuild - Begin Analysis ์Šคํ…์—์„œ SonarQube Project Key, Name ๋ฐ Version ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. Begin Analysis์™€ End Analysis ์‚ฌ์ด์—์„œ MSBuild ์Šคํ… ํ˜น์€ MSBuild 14(ํ˜ธํ™˜์„ฑ ์ฐธ์กฐ)์˜ ๊ฒฝ์šฐ Execute Windows batch command ์Šคํ…์„ ์‚ฌ์šฉํ•ด ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

SonarQube Scanner for Maven์œผ๋กœ ๋ถ„์„ํ•˜๊ธฐ

Global Configuration

  1. Jenkins์— administrator ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•œ ๋’ค, Manage Jenkins > Configure System ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. SonarQube servers ์„น์…˜์—์„œ Enable injection of SonarQue server configuration as build environment variables ํ•ญ๋ชฉ์— ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค

Job Configuration

  1. Job > Configure > Build Environment ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. Prepare SonarQube Scanner environment ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ด์„œ SonarQube ์„œ๋ฒ„์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ•ด๋‹น Job์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ˆ˜์˜ SonarQube ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด help ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. SonarQube ์„œ๋ฒ„ ์„ค์ •์— ๋”ฐ๋ผ ์ผ๋ถ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๋นˆ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Maven goal ์„ค์ • ์ธ์ž๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

    $SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL

Post-build Action for Maven analysis ์Šคํ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ๋”์ด์ƒ ์œ ์ง€๋ณด์ˆ˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Jenkins pipeline์—์„œ ๋ถ„์„ํ•˜๊ธฐ

SonarQjube Scanner for Jenkins ํ”Œ๋Ÿฌ๊ทธ์ธ v2.5๋ถ€ํ„ฐ ๊ณต์‹์ ์œผ๋กœ Jenkins Pipeline์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. 'withSonarQubeEnv' ๋ธ”๋ก์„ ์‚ฌ์šฉํ•ด ์—ฐ๋™ํ•  SonarQube ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Jenkins global configuration์— ์ €์žฅ๋œ ์—ฐ๊ฒฐ ์„ค์ • ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ scanner์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

Pipeline์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SonarQube v5.2 ์ด์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค,

์•„๋ž˜ ์ƒ˜ํ”Œ์€ Unix ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , SonarQube  ์„œ๋ฒ„์˜ ์ด๋ฆ„์„ 'My SonarQube Server'๋ผ๊ณ  ์„ค์ •ํ•œ ๊ฒฝ์šฐ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. Windows ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 'sh'๋ฅผ '.bat' ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค:

SonarQube Scanner
node {
  stage('SCM') {
    git 'https://github.com/foo/bar.git'
  }
  stage('SonarQube analysis') {
    // requires SonarQube Scanner 2.8+
    def scannerHome = tool 'SonarQube Scanner 2.8';
    withSonarQubeEnv('My SonarQube Server') {
      sh "${scannerHome}/bin/sonar-scanner"
    }
  }
}
SonarQube Scanner for Gradle
node {
  stage('SCM') {
    git 'https://github.com/foo/bar.git'
  }
  stage('SonarQube analysis') {
    withSonarQubeEnv('My SonarQube Server') {
      // requires SonarQube Scanner for Gradle 2.1+
      // It's important to add --info because of SONARJNKNS-281
      sh './gradlew --info sonarqube'
    }
  }
}
SonarQube Scanner for Maven
node {
  stage('SCM') {
    git 'https://github.com/foo/bar.git'
  }
  stage('SonarQube analysis') {
    withSonarQubeEnv('My SonarQube Server') {
      // requires SonarQube Scanner for Maven 3.2+
      sh 'mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar'
    }
  }
}
SonarQube Scanner for MSBuild
node {
  stage('SCM') {
    git 'https://github.com/foo/bar.git'
  }
  stage('Build + SonarQube analysis') {
    def sqScannerMsBuildHome = tool 'Scanner for MSBuild 2.2'
    withSonarQubeEnv('My SonarQube Server') {
      // Due to SONARMSBRU-307 value of sonar.host.url and credentials should be passed on command line
      bat "${sqScannerMsBuildHome}\\SonarQube.Scanner.MSBuild.exe begin /k:myKey /n:myName /v:1.0 /d:sonar.host.url=%SONAR_HOST_URL% /d:sonar.login=%SONAR_AUTH_TOKEN%"
      bat 'MSBuild.exe /t:Rebuild'
      bat "${sqScannerMsBuildHome}\\SonarQube.Scanner.MSBuild.exe end"
    }
  }
}

ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํŒŒ์ดํ”„๋ผ์ธ ์ค‘๋‹จํ•˜๊ธฐ

waitForQualityGate ๋‹จ๊ฒŒ๋ฅผ ์‚ฌ์šฉํ•ด SaonrQube ์„œ๋ฒ„๊ฐ€ ๋ถ„์„์„ ์™„๋ฃŒํ•˜๊ณ  ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ค€๋น„ ์‚ฌํ•ญ:

  • SonarQube v6.2 ์ด์ƒ ์„ค์น˜ (webhook ๊ธฐ๋Šฅ ํ•„์š”)
  • SonarQube ์„œ๋ฒ„๊ฐ€ <your Jenkins instance>/sonarqube-webhook/์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก webhook์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. SonarQube v6.2 ๋ฐ v6.3์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์˜ ์Šฌ๋ž˜์‹œ('/')๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ดํ”„๋ผ์ธ์—์„œ withSonarQubeEnv ์Šคํ… ์„ค์ •(SionarQube taskId๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ ์ปจํ…์ŠคํŠธ์— ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•จ)

์˜ˆ:

SonarQube Scanner for MSB
node {
  stage('SCM') {
    git 'https://github.com/foo/bar.git'
  }
  stage('SonarQube analysis') {
    withSonarQubeEnv('My SonarQube Server') {
      sh 'mvn clean package sonar:sonar'
    } // SonarQube taskId is automatically attached to the pipeline context
  }
}
  
// No need to occupy a node
stage("Quality Gate"){
  timeout(time: 1, unit: 'HOURS') { // Just in case something goes wrong, pipeline will be killed after a timeout
    def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv
    if (qg.status != 'OK') {
      error "Pipeline aborted due to quality gate failure: ${qg.status}"
    }
  }
}

webhook์„ ์‚ฌ์šฉํ•ด ์ด ๋‹จ๊ณ„๋ฅผ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ node๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, Jenkins๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค(์žฌ์‹œ์ž‘ ํ›„์— ์Šคํ…์ด ๋ณต์›๋ฉ๋‹ˆ๋‹ค).


Related content

Analyzing with SonarQube Scanner for Maven
Analyzing with SonarQube Scanner for Maven
More like this
Analyzing with SonarQube Scanner for MSBuild
Analyzing with SonarQube Scanner for MSBuild
More like this
๋กœ์ปฌ ๋ฐ ๋ธŒ๋žœ์น˜ ๋ถ„์„
๋กœ์ปฌ ๋ฐ ๋ธŒ๋žœ์น˜ ๋ถ„์„
More like this
Analyzing with SonarQube Scanner for Gradle
Analyzing with SonarQube Scanner for Gradle
More like this
SonarQube 9.0 ๋ฆด๋ฆฌ์Šค
SonarQube 9.0 ๋ฆด๋ฆฌ์Šค
More like this
Analyzing with SonarQube Scanner for Ant
Analyzing with SonarQube Scanner for Ant
More like this

ยฉ 2017-2018 Moses Kim.

๋ณ„๋„์˜ ์–ธ๊ธ‰์ด ์—†๋Š” ํ•œ, ์ด ์ŠคํŽ˜์ด์Šค์˜ ์ปจํ…์ธ ๋Š” ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ปค๋จผ์ฆˆ ์ €์ž‘์žํ‘œ์‹œ-๋น„์˜๋ฆฌ-๋™์ผ์กฐ๊ฑด๋ณ€๊ฒฝํ—ˆ๋ฝ 4.0 ๊ตญ์ œ ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SONARQUBE๋Š” SonarSource SA์˜ ํŠธ๋ ˆ์ด๋“œ ๋งˆํฌ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋ ˆ์ดํŠธ ๋งˆํฌ ๋ฐ ์ €์ž‘๊ถŒ์€ ๊ฐ ์†Œ์œ ์ž์˜ ์†Œ์œ ๋ฌผ์ž…๋‹ˆ๋‹ค.

::: SonarQube ๊ด€๋ จ ๋ฌธ์˜ : ์ด๋ฉ”์ผ :::