ubuntu에 SonarQube 설치하기

회사에서 혼자서 프로젝트를 진행하다보면 코드에 문제가 거나나 취약점 혹은 잠재적 에러 발상 부분에 대해서 스스로 파악하고 해결해야하는 문제점을 가지고 있습니다.
저도 항상 그 부분때문에 배포하고 나서도 생각하지도 못한 NPE로 인해서 재 배포하는 일도 빈번했습니다.
물론 완벽하게 예외처리를하고, 입력값에 대한 철저한 검증을 했다만 막을 수 있었겠지만 혼자서 완벽하게 처리하기에는 아직 경험과 실력이 부족한거 같습니다.

그래서 이번에는 SonarQube 정적 분석툴을 이용해 제가 작업한 소스코드에 어떤부분이 잠재적으로 오류를 발생하는지, 어떻게 수정하면 좋을지 등에 대한 피드백을 받기로 했습니다.
우선 SonarQube 대한 자세한 내용은 아래 글을 참고하면 좋을거 같구요
이번 포스팅에선 Ubuntu에 SonarQube 설치하는 방법에 대해서 작성해보려고 합니다.


1. Download

우선 SonarQube 다운로드 페이지로 이동해서 설치하려는 버젼의 압축파일 링크를 복사합니다.
저는 LTS 버젼인 6.7.7 버젼을 설치 했습니다.

링크주소 복사

복사된 주소를 ubuntu 서버 터미널에서 wget을 이용해 다운받습니다.

1
2
3
4
5
6
7
8
# 다운로드
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.7.zip

# zip파일 압축 해제를 위한 unzip 설치
sudo apt-get install unzip

# zip파일 압축 해제
unzip sonarqube-6.7.7.zip

2. JDK 설치

SonarQube를 사용하려면 서버에 JDK도 설치 되어있어야 합니다만. 지원하는 JDKsms Open JDK 8 버젼만 지원합니다. 참고

그래서 Open JDK 8 버젼을 설치합니다.

1
2
3
4
5
6
7
8
# Open JDK 8 설치
sudo apt-get install openjdk-8-jdk

# Java 환경변수 설정
export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

# 환경변수 설정 내용 확인
echo $JAVA_HOME

3. Database 셋팅

SonarQube에는 MS-SQL, Oracle, PostgreSQL, MySQL을 지원하는거 같은데 MySQL은 권장하지 않는다고 합니다.(데이터 센터 에디션은 아예 MySQL을 지원하지 않는다고 합니다.)

그래서 여기서는 PostgreSQL을 이용해 셋팅을 해보도록 하겠습니다.
(저도 PostgreSQL은 처음이라 좀 셋팅이 어설플 수 있습니다.)

PostgreSQL 셋팅은 아래와 같이 작업합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# postgresql을 설치합니다.
sudo apt-get install postgresql

# postgres로 계정을 바꿔줍니다.
sudo -i -u postgres

# postgresql의 쉘 커맨드를 실행합니다.
psql

# 계정을 생성하고 비밀번호를 설정해줍니다.
CREATE USER kys9261 WITH ENCRYPTED PASSWORD 'password123';

# sonar라는 DB를 생성하고, kys9261 계정을 관리자(?)로 할당합니다.
# 테이블 이름은 변경하셔도 되지만 SonarQube에서 사용되는 기본 DB 이름은 sonar입니다.
create database sonar owner kys9261;

# 쉘 커맨드를 종료합니다.
CTRL + C

# 원래 계정으로 돌아갑니다.
exit

4. SonarQube 셋팅

이제 SonarQube 셋팅 후 실행하는 단계만 남았습니다.

1
2
3
4
5
6
7
8
9
# SonarQube 설정 파일을 수정합니다.
vi $HOME/sonarqube-6.7.7/conf/sonar.properties

# 16번 17번 주석을 해제후 DB셋팅시 만든 계정에 정보를 입력해줍니다.
sonar.jdbc.username=kys9261
sonar.jdbc.password=password123

# 39번 줄의 주석을 해제해줍니다.
sonar.jdbc.url=jdbc:postgresql://localhost/sonar

5. SonarQube 실행

이제 SonarQube를 실행해보겠습니다.
cd $HOME/sonarqube-6.7.7/conf로 이동해서 보면 여러 운영체제의 실행폴더가 있는데요
그중에서 linux-x86-64 폴더로 들어갑니다(linux-x86-32 도 있는데 OS에 맞춰서 들어가시면 될거 같아요)

실행할때 추가적인 옵션에 따라서 그냥 실행 혹은 중단, 재시작, 상태확인, 콘솔 출력 등의 작업을 수행할 수 있는데요
설치후 최초 실행하는거라서 저는 항상 정상적으로 실행되는지 궁금해서 콘솔 출력 옵션을 추가해서 실행합니다.
(옵션 목록 : console | start | stop | restart | status | dump)

1
2
3
4
5
# 기본적인 SonarQube 실행
./sonar.sh start

# SonarQube 실행과 콘솔 출력
./sonar.sh console start

SonarQube가 정상적으로 실행이 되었다면 웹브라우저를 통해 접속해보겠습니다.
SonarQube의 기본 포트는 9000번 이구요 변경하고 싶다고 하시면 sonar.properties 파일에서 변경 가능합니다.

6. SonarQube와 프로젝트 연동

http://서버의IP:9000 로 접속하시면 SonarQube 페이지가 노출됩니다.

Sonarqube 접속페이지

로그인을 할때는 ID : admin / PW : admin으로 접속하시고 관리자 페이지에서 계정추가 및 관리를 해주시면 됩니다.

최초 로그인하면 연결된 프로젝트가 없어서 튜토리얼이 진행되면서 프로젝트 연동을 도와줍니다.
첫번째 튜토리얼

튜토리얼 1번에 Token의 이름을 입력하시고 Generate 버튼을 누르시면 토큰이 생성됩니다.
(토큰은 프로젝트 식별을 위해 사용되는거 같습니다.)

토큰생성
토큰 생성 완료 후 Continue 버튼을 누르시면 다음 튜토리얼로 넘어갑니다.

프로젝트 연동
프로젝트를 연동하기 위해 선택해야 하는 부분이 있는데요 우선 프로젝트가 어떤 언어로 개발되었는지, 빌드툴은 Maven을 쓰는지 Gradle을 쓰는지 선택을 하면 오른쪽에 연동할때 필요한 스크립트 및 플러그인 코드가 나옵니다.

저는 Spring에 Gradle을 사용하고 있어서 위와 같이 선택하였구요.
첫번째 코드는 프로젝트의 build.gradle파일에 추가해주시면 됩니다.

두번째 스크립트는 터미널을 열고 프로젝트가 위치한 폴더로 이동후 터미널에 입력하면 해당 프로젝트를 SonarQube와 연동하게 됩니다.
정상적으로 연동이 완료되면 아래 이미지와 같이 연동된 프로젝트가 노출되고요 여러가지 버그, 취약점등에 대해 확인할 수 있습니다.
연동완료

다음번에는 이전 포스팅에서 작업한 Gitlab과 SonarQube를 연동해서 PR이 요청되면 자동으로 SonarQube의 정적분석을 실행해서 결과를 알려주는 방법에 대해 소개해 보겠습니다.


참고 링크

공유하기