지속적인 소스코드 품질 관리에 필요한 오픈 소스 플랫폼 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 이다.
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 > </ properties > </ profile > |
4. Jenkins 연동
이제 Sonar와 jenkins를 연동해본다.
1) Jenkins 관리 > 플러그인 관리에서 Sonar 플러그인을 설치한다.
2) Jenkins 관리 > 시스템 설정에서 Sonar를 추가한다. 설치 정보는 sonar.properties 파일을 참고해서 작성하면 된다.
3) 다음은 Jenkins Job에 Sonar를 trigger로 걸어준다.
Maven 프로젝트 > 설정 > Post-build Actions에서 sonar를 추가하고 아래처럼 설정한다.