우분투(Ubuntu) 환경에 SonarQube 설치하기

SonarQube(이하 sonarqube)는 정적 코드 분석기로, LGPL(lesser gnu general public license) 라이선스(license)가 적용된 오픈소스(open source) 소프트웨어입니다.

20개 이상의 프로그래밍 언어의 버그와 code smells, 코드 커버리지, 유닛 테스트, 코딩 표준, 중복 코드, 코드 복잡도, 주석 및 보안 취약점의 보고서를 제공하고, 자동 리뷰를 수행하여 지속적인 코드 품질 검사를 위한 플랫폼입니다.

sonarqube는 Maven, Ant, Gradle, MSBuild 및 CI(continuous integration) 도구인 Atlassian Bamboo, Jenkins, Hudson 등과의 연동을 제공합니다.

이 포스트에서는 우분투(ubuntu) 환경에서 sonarqube를 설치하는 방법을 소개합니다.

선행조건(PREREQUISITE)

  • ubuntu 환경에 PostgreSQL이 설치되어 있어야 합니다.
  • 방화벽 설정이 필요합니다.
    • TCP 9000 포트가 개방되어 있어야 합니다.

PostgreSQL 설치 방법은 우분투(Ubuntu) 환경에 PostgreSQL 설치하기 포스트를 참고하시기 바랍니다.

방화벽 설정 방법은 우분투(Ubuntu) 환경에 방화벽(Firewalld) 설치 및 설정하기 포스트를 참고하시기 바랍니다.

테스트 환경(TEST ENVIRONMENT)

  • VMware® Workstation 15 Pro (15.5.1 build-15018445)
  • Ubuntu 18.04.3 LTS (Bionic Beaver) Server (64-bit)
  • SonarQube 7.9.1
  • PostgreSQL 11.5 (Ubuntu 11.5-3.pgdg18.04+1)
  • OpenJDK 1.8.0_222

요약(SUMMARY)

  1. sonarqube 파일 내려받기
  2. PostgreSQL 설정
  3. sonarqube 설정
  4. 스크립트로 sonarqube 서비스 관리
  5. 웹브라우저로 sonarqube 접속

내용(CONTENTS)

아래 명령어로 workspace 디렉터리를 생성합니다.

$ export LINDAREX_WORKSPACE=${HOME}/workspace
$ mkdir -p ${LINDAREX_WORKSPACE}

1. sonarqube 파일 내려받기

$ wget -P ${LINDAREX_WORKSPACE} https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip

2. 내려받은 파일 압축 해제

$ unzip -q ${LINDAREX_WORKSPACE}/sonarqube-7.9.1.zip -d ${LINDAREX_WORKSPACE}
$ ln -s ${LINDAREX_WORKSPACE}/sonarqube-7.9.1 ${LINDAREX_WORKSPACE}/sonarqube

4. PostgreSQL 설정

  • sonarqube와 연동 될 사용자 계정과 데이터베이스(Database)를 생성합니다.

4.1. postgres 계정 로그인

$ sudo su - postgres

4.2. psql utility 실행

$ psql postgres

4.3. 사용자 생성

postgres=# create user sonar;

4.4. 사용자 Role 설정

postgres=# alter role sonar with createdb;

4.5. 사용자 비밀번호 설정

postgres=# alter user sonar with encrypted password 'sonar-password';
postgres=# alter user postgres password 'postgres-password';

생성한 사용자 정보를 조회합니다.

postgres=# \du

4.6. Database 생성

postgres=# create database sonar owner sonar;

4.7. Privileges 설정

postgres=# grant all privileges on database sonar to sonar;

생성한 Database를 조회합니다.

postgres=# \l

4.8. psql utility 종료

postgres=# \q

4.9. postgres 계정 로그아웃

$ exit

5. sonarqube 설정

  • 위에서 생성한 PostgreSQL 사용자 정보와 Database 정보, sonarqube UI의 포트를 설정합니다.
$ vi ${LINDAREX_WORKSPACE}/sonarqube/conf/sonar.properties
----------------------------------------
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar-password
sonar.jdbc.url=jdbc:postgresql://{MY-IP}/sonar
sonar.web.port=9000
----------------------------------------
  • OpenJDK(Java) 경로를 설정합니다.
$ vi ${LINDAREX_WORKSPACE}/sonarqube/conf/wrapper.conf
----------------------------------------
wrapper.java.command=/home/rex/workspace/tool/java11/bin/java
----------------------------------------

6. Max map count 설정

$ sudo vi /etc/profile
----------------------------------------
sudo sysctl -w vm.max_map_count=262144
----------------------------------------

sonarqube를 Linux에 설치 시, 아래 사항이 요구됩니다.

  • vm.max_map_count :: 262144 이상
  • fs.file-max :: 65536 이상
  • file descriptors :: 65536 이상
  • threads :: 4096 이상

sonarqube 설치 시 필요 요구사항에 대한 자세한 정보는 https://docs.sonarqube.org/latest/requirements/requirements/를 확인해 주시기 바랍니다.

수정 내역 적용을 위해 아래 명령어를 입력합니다.

$ sudo source /etc/profile

7. 스크립트로 sonarqube 서비스(service) 관리

7.1. sonarqube service 시작

$ ${LINDAREX_WORKSPACE}/sonarqube/bin/linux-x86-64/sonar.sh start

7.2. sonarqube service 중지

$ ${LINDAREX_WORKSPACE}/sonarqube/bin/linux-x86-64/sonar.sh stop

7.3. sonarqube service 재시작

$ ${LINDAREX_WORKSPACE}/sonarqube/bin/linux-x86-64/sonar.sh restart

7.3. sonarqube service 상태 조회

$ ${LINDAREX_WORKSPACE}/sonarqube/bin/linux-x86-64/sonar.sh status

8. 웹브라우저로 sonarqube 접속

  • http://[MY-IP]:9000

마무리(CONCLUSION)

ubuntu 환경에 sonarqube 설치를 완료했습니다.

sonarqube를 활용하기 위해서는 추가적인 설정이 필요합니다.

Java 프로젝트(project)의 코드 정적 분석을 할 경우, project 설정 파일(build.gradle, pom.xml 등)에 SonarScanner 설정을 추가하고, CI와 연동하거나 로컬 환경에 sonarqube 설정을 해야 합니다.

대부분 현업에서는 Jenkins 등의 CI, GitHub 등의 버전 관리(version control) 시스템과 연동하여 SonarScanner를 통해 소스 코드를 분석합니다.

더 자세한 내용은 아래 참고 페이지를 확인해 주시기 바랍니다.

참고(REFERENCES)

Leave a comment