SonarQube에 해당하는 글 2

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

DevOps|2014. 8. 17. 17:11

다운로드

아래의 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 설치 및 설정

DevOps|2014. 8. 5. 22:23

MySQL Database

설치

MySQL 다운로드 페이지에서 설치 파일을 받아서 설치하거나, 아래 링크의 글에서 MySQL 설치 절을 참고하여 MySQL을 설치합니다.

MySQL 5.0.45 원하는 위치에 수동 설치 및 윈도 서비스로 등록 하기

여기에서는 윗 글을 참고하여 수동 설치 했으며, 오래된 5.0.45 버전 대신 5.1 대의 최신 버전인 5.1.73 버전을 사용했습니다.

설정

SonarQube 설치 문서에서 InnoDB 사용을 권장하고 있기 때문에 my.ini 파일의 [mysqld] 옵션을 아래와 같이 수정했습니다.

query_cache_type, query_cache_size 옵션을 추가했고, innodb 관련 옵션(innodb_*)은 값을 수정한 부분이 많습니다.

innodb_data_home_dir, innodb_log_group_home_dir 경로는 본인의 설치 경로에 맞게 수정해 주세요.

[mysqld]
port        = 3306
socket      = MySQL
skip-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
query_cache_type = 1
query_cache_size = 32M

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking
server-id   = 1

# Uncomment the following if you want to log updates
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = D:\\dev\\tool\\mysql\\data\\
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = D:\\dev\\tool\\mysql\\data\\
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

이제 명령 프롬프트를 하나 띄우고 database 스크립트 파일을 다운로드 받은 후 실행합니다.

D:\dev\tool\mysql\bin> mysql -u root -p < create_database.sql

sonar라는 이름의 Database와 사용자가 MySQL에 생성돼 있으면 스크립트가 잘 실행된 겁니다.

SonarQube

다운로드

아래 링크에서 SonarQube 4.4 버전을 다운로드 받아서 설치합니다. 만약 4.4 버전이 보이지 않으면 “Show all versions” 링크를 누르면 이전 버전이 보입니다.

http://www.sonarqube.org/downloads/

원하는 곳에 다운로드 받은 압축파일을 해제하면 설치는 완료입니다.

설정

SonarQube 설치 디렉토리 하위의 conf 디렉토리에 있는 sonar.properties 파일을 텍스트에디터로 엽니다. 아래와 같이 H2 database 관련 sonar.jdbc.url은 주석 처리하고, MySQL database 쪽의 주석은 없앱니다.

# Comment the following line to deactivate the default embedded database.
#sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

# directory containing H2 database files. By default it's the /data directory in the SonarQube installation.
#sonar.embeddedDatabase.dataDir=
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092


#----- MySQL 5.x
# Comment the embedded database and uncomment the following line to use MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

실행

SonarQube 설치 디렉토리 하위의 bin 디렉토리에는 각 플랫폼 별로 디렉토리가 구분되어 있습니다. 각자의 플랫폼에 맞는 디렉토리에 있는 실행파일로 SonarQube를 실행할 수 있습니다.

저는 Win32라서 [설치 디렉토리]\bin\windows-x86-32\StartSonar.bat 파일로 실행할 수 있었습니다.

MySQL을 먼저 실행한 후 SonarQube를 실행합니다. SonarQube 콘솔 창에 다음과 같이 웹서버가 시작되었다는 메시지가 나온 후, 브라우저에서 http://localhost:9000/에 접속하면 SonarCube Dashboards를 볼 수 있습니다.

wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2014.08.05 13:58:09 INFO  Web server is started

이제 관리자 계정(admin/admin)으로 로그인한 후 플러그인 설치 등의 작업을 진행하면 됩니다.

댓글()