SonarQube 설치 및 젠킨스 연동
SonarQube 정보
- 소스코드 품질관리
- SonarQube 7.7
- Open JDK 8
- Database
- PostgreSQL 9.3+
- Oracle 11G+
- MySQL 5.6+
아키텍쳐
OpenJDK8 설치
> Link
PostgreSQL9.6 설치
> Link
SonarQube7.7 설치
다운로드
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
압축해제, 디렉터리 이동
$ unzip sonarqube-7.7.zip
$ sudo mv sonarqube-7.7 /opt/sonarqube
계정 설정
- 실행할 때 root 계정으로 실행하면 안된다.
- 그러므로 sonar라는 계정을 생성해서 진행한다.
유저 생성
# 그룹 생성
$ sudo groupadd sonar
# 유저 생성
$ sudo useradd -m -g sonar -c "SonarQube User" -d /opt/sonarqube -s /bin/bash -p sonar sonar
# -m 홈디렉토리생성, -g 그룹지정, -c 설명, -d 디렉토리 지정, -s 쉘지정, -p 패스워드 지정
소유권한 변경
# 파일 소유권한 변경
$ sudo chown -R sonar:sonar /opt/sonarqube
환경설정
부팅 서비스로 등록(자동 실행)
$ sudo vim /usr/lib/systemd/system/sonar.service
# 아래 내용을 추가한다.
[Unit]
Description=SonarQube Service
After=syslog.target
After=network.target
[Service]
Type=forking
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
ExecReload=/opt/sonarqube/bin/linux-x86-64/sonar.sh restart
[Install]
WantedBy=multi-user.target
데몬 재로드를 한뒤 부팅시 등록 및 실행
# 데몬 재로드를 한뒤 부팅시 등록 및 실행
$ sudo systemctl daemon-reload
$ sudo systemctl enable sonar
$ sudo systemctl start sonar
db 연결 설정
$ su - sonar
# 만약 인증 실패가 발생하면 root에서 접속을 시도한다.
# root 접속이 안되면 root 패스워드를 활성화 해야 한다.(sudo passwd root)
$ vim /opt/sonarqube/conf/sonar.properties
실행 유저 설정
$ vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
실행
$ -bash-4.2$ /opt/sonarqube/bin/linux-x86-64/sonar.sh console start
최초 계정
- admin / admin
처음 posrgresql 구성간 아래와 같은 에러 메시지가 나올 경우
오류
....
psycopg2.OperationalError: FATAL: Ident authentication failed for user "test"
....
psql: FATAL: Peer authentication failed for user "test"
방안
[root] # vi /var/lib/pgsql/10/data/pg_hba.conf
위 경로 들어가 상황에 맞게 METHOD 부분의 ident를 MD5 or trust로 변경해 준다.
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Sonar Scanner 설치
- 젠킨스 서버에 설치한다.
다운로드
$ wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
압축해제, 이동
$ unzip sonar-scanner-cli-4.2.0.1873-linux.zip
$ sudo mv sonar-scanner-4.2.0.1873-linux/ /opt/sonar-scanner
conf 폴더의 sonar-project.properties 수정
- SonarQube 서버가 같은 vpn내에 있다면 private ip를 넣는다.
#----- Default SonarQube server
# sonarQube 를 / 가 아닌 별도의 context 로 설정했을 경우 localhost 대신 Full URL 로 설정 필요(Ex: https://qa.example.com/sonarqube)
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
Jenkins 설정
- https://www.youtube.com/watch?v=wSNlFThmUNs
Plugin 설치
보안토큰 생성
- sonarqube 웹페이지 접속
Jenkins관리 > 시스템 설정 > SonarQube servers 설정
토큰 적용
Jenkins관리 > Global Tool Configuration
- Jenkins에 설치한 sonar-scanner를 설정한다.
SonarQube 프로젝트 생성
src의 project root에 sonar-project.properties 생성
sonar.projectKey=웹에서 생성한 프로젝트 Key
sonar.projectName=웹에서 생성한 프로젝트 Name
sonar.projectVersion=1.0
sonar.source=src/main/java
sonar.java.binaries=buils.classes
sonar.language=java
sonar.sourceEncoding=UTF-8
Jenkins Job 설정
- Build > Add build step > Execute SonarQube Scanner
- 위에서 추가한 sonar-project.properties 파일을 넣는다.
Report
Slack Notification
- https://github.com/kogitant/sonar-slack-notifier-plugin
- 다운로드: https://github.com/kogitant/sonar-slack-notifier-plugin/releases/
Plugin 설치
$ cd /opt/sonarqube/extensions/plugins
$ wget https://github.com/kogitant/sonar-slack-notifier-plugin/releases/download/2.1.2/cks-slack-notifier-2.1.2.jar
# 재부팅
$ /opt/sonarqube/bin/linux-x86-64/sonar.sh restart