Sonar 설치 + Jenkins 연동


지속적인 소스코드 품질 관리에 필요한 오픈 소스 플랫폼 Sonar를 설치해보고, Sonar를 Jenkins와 연동하여 Maven 프로젝트를 분석해본다. 설치 테스트 환경은 아래와 같다.

  • ubuntu v12.04 LTS
  • maven v3.0.4
  • jenkins v1.517
  • mysql v5.5.31
  • sonar v3.5.1

1. Sonar 설치

직접 소스를 다운로드 받아 설치해도 되지만 본 글에서는 우분투의 apt-get 명령어를 이용하여 설치한다.
Sonar 패키지는 기본적으로 데비안 저장소에 포함되어있지 않으므로 /etc/apt/sources.list 파일에 아래 내용을 추가한다.

1
2
3
$ sudo vi /etc/apt/sources.list
deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/

그리고 apt-get을 이용하여 sonar 패키지를 설치한다.

1
2
$ sudo apt-get update
$ sudo apt-get install sonar

/opt/sonar 경로에 설치되며 init.d에도 등록된다. sonar 를 구동한다.

1
$ sudo service sonar start

http://localhost:9000 에 접근해서 sonar 서버가 구동하는지 확인한다. 설치 후 기본 계정 정보는 admin/admin 이다.

sonar

2. MySQL 연동

Sonar을 사용하기 위한 mysql 설정을 한다. database를 생성하고 사용자 권한을 부여한다.

1
2
3
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES on  sonar.*  to 'sonar'@'localhost' IDENTIFIED BY 'sonar' WITH GRANT OPTION;
flush privileges;

다음은 sonar.properties 에서 sonar 호스트 서버 정보와 mysql접속에 필요한 정보를 수정한다.

1
$ sudo vi /opt/sonar/conf/sonar.properties

아래 내용처럼 Mysql연동에 필요한 주석을 해제하거나 추가한다.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# Listen host/port and context path (for example / or /sonar). Default values are 0.0.0.0:9000/.
sonar.web.host:                           0.0.0.0
sonar.web.port:                           9000
sonar.web.context:                        /
# Permissions to create tables and indexes must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username:                       sonar
sonar.jdbc.password:                       sonar
#----- 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
# Optional properties
sonar.jdbc.driverClassName:                com.mysql.jdbc.Driver
sonar.jdbc.validationQuery:                select 1

저장 후 sonar 데몬을 재시작한다. 재시작하면 Started sonar.라고 출력되지만 초기화 작업 때문에 sonar 서버에 바로 접근이 안될 수 있다. 진행 상황을 확인하려면 tail -f 로 로그를 살펴본다.

01
02
03
04
05
06
07
08
09
10
11
12
13
$ sudo service sonar restart
Stopping sonar...
Stopped sonar.
Starting sonar...
Started sonar.
$ tail –f /opt/sonar/logs/sonar.log
STATUS | wrapper  | 2013/06/04 10:34:18 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2013/06/04 10:34:18 | Launching a JVM...
INFO   | jvm 1    | 2013/06/04 10:34:19 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2013/06/04 10:34:19 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2013/06/04 10:34:19 |

Sonar가 정상적으로 구동된 후, mysql에서 테이블을 조회해보면 데이터가 입력된 것을 알 수 있다.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ mysql -usonar –Dsonar -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 58
Server version: 5.5.29-0ubuntu0.12.04.2 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables;
+---------------------------+
| Tables_in_sonar           |
+---------------------------+
| action_plans              |
| action_plans_reviews      |
| active_dashboards         |
| widgets                   |
+---------------------------+
49 rows in set (0.01 sec)

3. Maven 설정

메이븐 프로젝트를 sonar로 분석하기 위해 환경 설정을 한다.
환경 설정 파일인 ${MAVEN_HOME}/conf/settings.xml 을 열어 아래처럼 profile 정보를 입력한다.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<profile>
    <id>sonar</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <sonar.jdbc.url>
        </sonar.jdbc.url>
        <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
        <sonar.jdbc.username>sonar</sonar.jdbc.username>
        <sonar.jdbc.password>sonar</sonar.jdbc.password>
        <sonar.host.url>http://localhost:9000</sonar.host.url>
    </properties>
</profile>

4. Jenkins 연동

이제 Sonar와 jenkins를 연동해본다.

1) Jenkins 관리 > 플러그인 관리에서 Sonar 플러그인을 설치한다.
sonar-jenkin1

2) Jenkins 관리 > 시스템 설정에서 Sonar를 추가한다. 설치 정보는 sonar.properties 파일을 참고해서 작성하면 된다.
sonar-jenkins2

3) 다음은 Jenkins Job에 Sonar를 trigger로 걸어준다.
Maven 프로젝트 > 설정 > Post-build Actions에서 sonar를 추가하고 아래처럼 설정한다.

sonar-jenkins3

4) 모든 설정이 완료 되었다. 마지막으로 해당 프로젝트에 가서 Build now를 해본다.
sonar-jenkis4

Build에 성공하면 sonar 서버에 해당 프로젝트가 분석되어 있는 것을 확인할 수 있다.
sonar-result


답글 남기기

이메일 주소는 공개되지 않습니다.