SonarQube Runner를 사용하여 프로젝트 분석하기

다운로드

아래의 SonarQube Runner 페이지에서 다운로드할 수 있습니다.

Installing and Configuring SonarQube Runner

여기에서는 2.4 버전을 다운로드하여 사용했습니다.

설치

다운로드 받은 zip 파일을 원하는 경로를 지정하여 압축을 해제합니다. <설치 디렉토리>/conf/sonar-runner.properties 파일을 열어서 자신의 환경에 맞게 수정합니다. 동일한 PC에 SonarQube를 설치했고 기본 설정을 변경하지 않았으면, sonar.jdbc.* 속성의 주석을 해제하는 정도가 할일의 전부입니다.

저는 SonarQube 서버를 같은 PC에 설치했고 MySQL을 사용하고 있기 때문에 아래과 같이 설정을 완료했습니다.

#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- PostgreSQL
#sonar.jdbc.url=jdbc:postgresql://localhost/sonar

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8

#----- Oracle
#sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE

#----- Microsoft SQLServer
#sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor

#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

#----- Security (when 'sonar.forceAuthentication' is set to 'true')
#sonar.login=admin
#sonar.password=admin

SONAR_RUNNER_HOME 시스템 환경변수를 만들고 그 값으로 [설치 디렉토리]를 설정합니다.

[설치 디랙토리]\bin 디렉토리(%SONAR_RUNNER_HOME%\bin)를 path에 추가합니다. 이제 SonarQube Runner의 설치가 완료되었습니다.

프로젝트 분석

분석할 프로젝트의 루트 디렉토리에 sonar-project.properties 파일을 생성합니다. 저는 Enyo Framework를 clone 한 후 분석했기 때문에 아래와 같이 내용을 채웠습니다.

source 디렉토리에 분석 할 JavaScript 소스 코드가 있어서 sonar.sources 속성 값으로 지정했으며, SonarQube Update Center에서 JavaScript 플러그인을 설치했습니다.

sonar.projectKey=Enyo
sonar.projectName=Enyo
sonar.projectVersion=2.3
sonar.sources=source
sonar.sourceEncoding=UTF-8

이제 명령 프롬프트를 띄우고 프로젝트 루트 디렉토리로 이동한 후, sonar-runner를 실행합니다(SonarQube 서버는 이미 동작 중이어야 합니다).

D:\dev\repos\enyo>sonar-runner
D:\dev\tool\sonar-runner
SonarQube Runner 2.4
Java 1.7.0_60 Oracle Corporation (32-bit)
Windows 7 6.1 x86
INFO: Runner configuration file: D:\dev\tool\sonar-runner\conf\sonar-runner.properties
INFO: Project configuration file: D:\dev\repos\enyo\sonar-project.properties
INFO: Default locale: "ko_KR", source code encoding: "UTF-8"
INFO: Work directory: D:\dev\repos\enyo\.\.sonar
INFO: SonarQube Server 4.4
16:06:33.508 INFO  - Load global settings
16:06:34.063 INFO  - User cache: C:\Users\heuser\.sonar\cache
16:06:34.087 INFO  - Install plugins
16:06:35.588 INFO  - Install JDBC driver
16:06:35.610 INFO  - Create JDBC datasource for jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
16:06:36.479 INFO  - Initializing Hibernate
16:06:45.716 INFO  - Loading technical debt model...
16:06:45.754 INFO  - Loading technical debt model done: 37 ms
16:06:45.772 INFO  - Load project settings
16:06:45.805 INFO  - Apply project exclusions
16:06:46.069 INFO  - -------------  Scan Enyo
16:06:46.131 INFO  - Load module settings
16:06:51.278 INFO  - Loading rules...
16:06:51.470 INFO  - Loading rules done: 192 ms
16:06:51.566 INFO  - Configure Maven plugins
16:06:51.697 INFO  - No quality gate is configured.
16:06:52.256 INFO  - Base dir: D:\dev\repos\enyo\.
16:06:52.257 INFO  - Working dir: D:\dev\repos\enyo\.\.sonar
16:06:52.259 INFO  - Source dirs: D:\dev\repos\enyo\source
16:06:52.262 INFO  - Source encoding: UTF-8, default locale: ko_KR
16:06:52.266 INFO  - Index files
16:06:54.633 INFO  - 120 files indexed
16:06:56.894 INFO  - Quality profile for js: Sonar way
16:06:56.939 INFO  - JaCoCo report not found.
16:06:56.944 INFO  - JaCoCo IT report not found.
16:06:56.947 INFO  - JaCoCo reports not found.
16:06:56.984 INFO  - Sensor QProfileSensor...
16:06:56.991 INFO  - Sensor QProfileSensor done: 7 ms
16:06:56.991 INFO  - Sensor JavaScriptSquidSensor...
16:06:57.060 INFO  - 120 source files to be analyzed
16:06:59.101 INFO  - 120/120 source files analyzed
16:06:59.491 INFO  - Sensor JavaScriptSquidSensor done: 2500 ms
16:06:59.491 INFO  - Sensor CpdSensor...
16:06:59.492 INFO  - SonarBridgeEngine is used for js
16:06:59.498 INFO  - Cross-project analysis disabled
16:07:01.143 INFO  - Sensor CpdSensor done: 1652 ms
16:07:01.143 INFO  - Sensor InitialOpenIssuesSensor...
16:07:01.179 INFO  - Sensor InitialOpenIssuesSensor done: 36 ms
16:07:01.179 INFO  - Sensor ProjectLinksSensor...
16:07:01.186 INFO  - Sensor ProjectLinksSensor done: 7 ms
16:07:01.188 INFO  - Sensor VersionEventsSensor...
16:07:01.196 INFO  - Sensor VersionEventsSensor done: 8 ms
16:07:01.196 INFO  - Sensor FileHashSensor...
16:07:01.203 INFO  - Sensor FileHashSensor done: 7 ms
16:07:01.396 INFO  - Execute decorators...
16:07:02.346 INFO  - Store results in database
16:07:05.655 INFO  - ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/Enyo
16:07:05.706 INFO  - Executing post-job class org.sonar.plugins.core.issue.notification.SendIssueNotificationsPostJob
16:07:05.774 INFO  - Executing post-job class org.sonar.plugins.core.batch.IndexProjectPostJob
16:07:06.051 INFO  - Executing post-job class org.sonar.plugins.dbcleaner.ProjectPurgePostJob
16:07:06.060 INFO  - -> Keep one snapshot per day between 2014-07-09 and 2014-08-05
16:07:06.061 INFO  - -> Keep one snapshot per week between 2013-08-07 and 2014-07-09
16:07:06.062 INFO  - -> Keep one snapshot per month between 2009-08-12 and 2013-08-07
16:07:06.065 INFO  - -> Delete data prior to: 2009-08-12
16:07:06.069 INFO  - -> Clean Enyo [id=33]
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
Total time: 38.279s
Final Memory: 11M/111M
INFO: ------------------------------------------------------------------------

분석이 정상적으로 완료되면 SonarQube에서 분석결과를 확인할 수 있습니다.

SonarQube Dashboard

신고