-
Notifications
You must be signed in to change notification settings - Fork 6
Sonarqube PR Decoration 적용기
Richard JEON edited this page Aug 16, 2022
·
2 revisions
- PR 생성 시, PR 코멘트로 정적 분석 리포트가 등록되게 한다
- PR 생성 시, 정적 분석 리포트를 SonarQube 서버에 누적한다
- 정적 분석 리포트에는
코드 커버리지
,버그 탐지
,코드 스멜 탐지
,보안 취약성 탐지
등이 포함된다. - 전체 오퍼레이션 영상 참고
-
SonarCloud
는 직접 호스팅하지 않아도 되고 연동도 간편하다는 장점이 있음- 그러나 woowacourse-teams Organization 내에 하나의 Repository에 대해서만 Collaborator로 속해있기에 권한 이슈가 발생함
- PR 데코레이션 정도는 가능하나, 상세 리포트를 확인할 수 없음. 공용 계정 로그인 불가.
-
SonarQube Community Edition
은 오픈 소스로, 직접 호스팅한다면 무료로 구축하여 사용할 수 있음- 단, PR 데코레이션은 유료인 Developer Edition부터 지원
- 대신 플러그인을 설치하여 Github 권한을 내장시킴으로써 PR에 코멘트를 작성하는 식으로 PR 데코레이션을 대체할 수 있음
- 최신 LTS인 8.9 버전을 선택했으나, 플러그인 이슈가 있어 9.5 버전을 설치
- SonarQube 호스팅용 EC2 인스턴스 생성
- 스왑 메모리 설정
- SonarQube 실행을 위한 max number of threads 등 설정
- JDK 11 설치
- SonarQube 9.5 설치
- PostgreSQL 12 설치
- PR 데코레이션을 위한 플러그인 설치
- Github App 생성 및 woowacourse-teams 내 2022-pickpick 리포지토리에 설치
- SonarQube에 생성한 Github App 연동
- Repository Secret 설정 및 Github Actions yml 추가
# swap memory
touch /home/ubuntu/swapfile
sudo fallocate -l 2G /home/ubuntu/swapfile
sudo chmod 600 /home/ubuntu/swapfile
sudo mkswap /home/ubuntu/swapfile
sudo swapon /home/ubuntu/swapfile
sudo vi /etc/fstab
/home/ubuntu/swapfile swap swap defaults 0 0 # 이 내용을 맨 아레에 추가하고 저장
free -h # 적용 확인
sudo vi /etc/sysctl.conf
#이하 내용을 아래에 붙여넣기
vm.max_map_count=524288
fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
sudo vi /etc/security/limits.conf
# 아래 내용 붙여넣기
* - nofile 131072
* - nproc 8192
# 위 설정을 추가해주지 않으면 소나큐브 기동 시
# max user process 숫자, open file 숫자 제한이 너무 적다면서 예외 발생함
# 아래는 오류 예시
# bootstrap check failure [1] of [2]:
# max number of threads [3522] for user [ubuntu] is too low,
# increase to at least [4096]
# bootstrap check failure [2] of [2]:
# max virtual memory areas vm.max_map_count [65530] is too low,
# increase to at least [262144]
# OpenJDK 11 설치
sudo apt update
sudo apt install openjdk-11-jdk -y
# sonarqube-9.5.0.56709 다운
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.5.0.56709.zip
# unzip 설치
sudo apt install unzip
# 압축 풀기
unzip sonarqube-9.5.0.56709.zip
# 권한 설정
sudo chown -R ubuntu sonarqube-9.5.0.56709
# 포트 설정
sudo vi sonarqube-9.5.0.56709/conf/sonar.properties
# sonar.web.port=8081로 설정
# postgresql-12 설치
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-12
systemctl status postgresql # 설치하면 자동으로 실행됨
sudo lsof -i:5432 # postgresql은 기본포트 5432 에서 동작
# postgresql 초기 비밀번호 변경 - id:postgres pw:pickpick
sudo passwd postgres # 비밀번호 세팅 pickpick
sudo su - postgres
createuser richsonar # 유저 생성
psql
alter user richsonar with encrypted password 'rich1234';
# 생성한 유저에 비밀번호 세팅
# ALTER ROLE 이라고 나옴
create database sonarqube owner richsonar;
# 소나큐브용 데이터베이스 생성
# CREATE DATABASE 라고 나옴
grant all privileges on database sonarqube to richsonar;
# richsonar 계정에 소나큐브용 데이터베이스 권한 부여
# GRANT 라고 나옴
\q
exit
sudo systemctl restart postgresql # postgresql 재실행
systemctl status postgresql # 재실행 확인
sudo vi /home/ubuntu/sonarqube-9.5.0.56709/conf/sonar.properties
# 이하 내용 주석 해제 후 기입
sonar.jdbc.username={username}
sonar.jdbc.password={password}
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
# SonarQube 기동
nohup java -jar sonarqube-9.5.0.56709/lib/sonar-application-9.5.0.56709.jar &
# 기동 후엔 publicIp:8081 로 접속하여 실행 확인
# 초기 계정/비밀번호는 admin/admin
# 소나큐브 버전별 지원되는 플러그인 버전이 다르므로 반드시 확인!
# 참고로 소나큐브 8.9가 LTS여서 이에 맞는 1.8.2를 시도했으나 PR 데코레이션이 적용 안됨
# https://github.com/mc1arke/sonarqube-community-branch-plugin/releases
wget https://github.com/mc1arke/sonarqube-community-branch-plugin/releases/download/1.12.0/sonarqube-community-branch-plugin-1.12.0.jar
# 파일 이동
mv sonarqube-community-branch-plugin-1.12.0.jar sonarqube-9.5.0.56709/extensions/plugins/
# 소나큐브 설정파일에 플러그인 등록을 위한 파일 수정
sudo vi sonarqube-9.5.0.56709/conf/sonar.properties
# 96번 라인
sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.12.0.jar=web
# 247번 라인
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.12.0.jar=ce
# Administration -> System -> Restart Server
# 재실행
- https://github.com/settings/apps/new
- Homepage URL 은 어떤 내용을 적어도 무관
- callback URL과 webhook URL은 SonarQube 서버 주소를 입력 ex) http://1.1.1.1:8081
- Repository Permissions에 아래 권한 추가
- Checks - Read and write
- Commit statuses - Read-Only
- Metadata - Read-only (default)
- Pull requests - Read and write
- Any account 로 선택 후 생성
- General 에서 Client Secret, private key 생성 및 보관
- woowacourse-teams 에 설치
- Add a project -> Github 선택
- Configuration name은 식별가능한 아무 값 입력
- Github API URL에는 https://api.github.com 입력
- Github App ID, Client ID, Client Secret, Private Key 각각 입력
- Add Project -> Github 을 다시 진행하여 리포지토리 선택
- with Github Actions 선택
- SONAR_TOKEN, SONAR_HOST_URL 을 Repository Secret으로 등록
- 예시로 생성해주는 Github Actions yml파일을 .github/workflows 이하 경로에 추가