-
[AWS + JENKINS + SONARQUBE] Spring 프로젝트 CI/CD 구현하기 3) CD 구현하기 ② (Sonarqube 설치 및 연동)Spring 2022. 9. 17. 09:14
이번엔 프로젝트를 배포할 때, Jenkins와 Sonarqube를 연동하여 코드에 문제가 없는지 확인한 후 배포가 진행되도록 할 것이다.
Sonarqube 설치 배경 설정
먼저 sonarqube를 사용하기 위한 설정을 위해 다음과 같이 root사용자로 변환해준다. 기존 ubuntu 사용자로 진행시 permit denied가 된다. 자세한 내용은 다음에서 확인이 가능하다.
https://docs.sonarqube.org/7.9/requirements/requirements/
Prerequisites and Overview | SonarQube Docs
The only prerequisite for running SonarQube is to have Java (Oracle JRE 11 or OpenJDK 11) installed on your machine. Note: On Mac OS X it is highly recommended to install Oracle JDK 11 instead of the corresponding Oracle JRE since the JRE installation does
docs.sonarqube.org
## 현재 사용자 확인 ubuntu@ubuntu:~$ whoami ubuntu ## root 사용자 패스워드 설정 ubuntu@ubuntu:~$ sudo passwd root [sudo] password for ubuntu: New password: Retype new password: passwd: password updated successfully ## root 사용자로 전환 ubuntu@ubuntu:~$ su root Password: ## 사용자 확인 root@ubuntu:~# whoami root
다음으로 sonarqube를 설치하기 위한 몇가지 설정을 진행해준다.
## 시스템 설정 (다음의 내용을 추가로 입력) ## sonarqube 설치를 위한 사용자 스레드 수는 4096 이상, max-file은 65536 이상이어야 한다. $ vim /etc/sysctl.conf vm.max_map_count=262144 fs.file-max=65536 ulimit -n 65536 ulimit -u 4096 ## sonar라는 사용자모드일때에도 다음과 같이 반영이 되도록 설정해준다. ## 여기서 nofile은 file, nproc은 max user proccess를 의미한다. $ vim /etc/security/limits.conf sonar soft nofile 65536 sonar hard nofile 65536 sonar soft nproc 4096 sonar hard nproc 4096 ## 시스템을 리부트 해준다. root@ip-172-31-0-62:/# reboot
자바 설정 파일을 확인한다.
$ sudo update-alternatives --config java There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-11-openjdk-amd64/bin/java
Postgres DB 설치
Sonarqube 사용(내용 저장)을 위해서 Postgres DB를 설치해준다. 여기서 보면 postgres는 5432번 포트에서 작동하고 있기 때문에 ec2 보안 인바운드 규칙에 해당 포트를 추가해주어야 한다.
## postgres 설치 $ sudo apt-get update $ sudo apt-get install postgresql postgresql-contrib ## postgres 실행 $ sudo systemctl enable postgresql.service ## postgres 실행 (active) 확인 root@ip-172-31-0-62:/# sudo systemctl status -l postgresql.service ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Fri 2022-09-16 17:57:27 UTC; 2min 31s ago Main PID: 6390 (code=exited, status=0/SUCCESS) CPU: 1ms ## postgres 사용자 등록 $ sudo passwd postgres ## postgres 사용자로 전환 $ su postgres ## postgres의 sonar 사용자 등록 및 데이터 베이스, 권한 설정 $ createuser sonar $ psql $ ALTER USER sonar WITH ENCRYPTED PASSWORD 'sonar'; $ CREATE DATABASE sonarqube OWNER sonar; $ GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonar; ## postgres 에서 나오기 postgres=# \q postgres@ip-172-31-0-62:/$ exit ## postgres 재실행 $ systemctl restart postgresql ## postgres 상태 확인 (running) $ sudo systemctl status -l postgresql ## 포트확인을 위한 net-tools 설치 $ sudo apt install net-tools ## postgres 포트 및 상태 확인 $ netstat -tulpena | grep postgres tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 114 40906 6672/postgres udp 0 0 127.0.0.1:48858 127.0.0.1:48858 ESTABLISHED 114 40908 6672/postgres
Sonarqube 설치 및 실행하기
이제 Sonarqube를 설치하자.
https://www.sonarqube.org/downloads/
Download | SonarQube
Get the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.
www.sonarqube.org
## sonarqube 폴더 생성 $ sudo mkdir /sonarqube/ ## 설치 파일 다운 $ sudo curl -O https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.3.0.34182.zip ## 압축 해제 $ sudo apt-get install zip ## opt 폴더에 압축파일 해제 및 설치 $ sudo unzip sonarqube-8.3.0.34182.zip -d /opt/ $ cd /opt/ ## sonarqube 폴더안으로 해제 파일 이동 $ mv sonarqube-8.3.0.34182/ sonarqube root@ip-172-31-0-62:/opt# ls sonarqube ## sonarqube를 위한 그룹, 사용자 등록 및 권한 설정 $ sudo groupadd sonar $ sudo useradd -c "SonarQube User" -d /opt/sonarqube/ -g sonar sonar $ sudo chown sonar:sonar /opt/sonarqube/ -R
이제 postgres와의 연동을 위한 설정을 진행한다.
## 설정파일에 다음의 내용 추가 $ vim /opt/sonarqube/conf/sonar.properties ## db 연동 설정 sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube ## elasticsearch 설정 sonar.search.javaOpts=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
Sonarqube 실행을 위한 사용자를 설정하고 실행한다.
## 사용자 설정 $ vi sonar.sh RUN_AS_USER=sonar ## 방화벽 설정 $ sudo apt update && sudo apt install firewalld -y $ sudo firewall-cmd --version $ sudo firewall-cmd --permanent --add-port=9000/tcp $ sudo systemctl restart firewalld $ sudo firewall-cmd --list-all ## 사용자 전환 및 sonarqube 실행 $ su sonar $ bash sonar@ip-172-31-0-53:/opt/sonarqube/bin/linux-x86-64$ ./sonar.sh console start
다음과 같이 Process[es] is up을 통해서 잘 실행되는 것을 확인할 수 있다.
Sonarqube 토큰 생성
이제 http://[sonarqube ec2의 퍼블릭 ip]:9000으로 소나큐브를 실행할 수 있다. 초기 아이디, 비밀번호는 admin, admin이다.
먼저 토큰을 생성해준다.
My Account -> Security -> Generate Tokens에서 토큰이름 설정 후 Generate -> 생성된 토큰 copy
Sonarqube 프로젝트 생성하기
그 다음 프로젝트를 등록해준다.
Projects -> create new project -> Project key 입력 -> 생성
Jenkins와 Sonarqube 연동하기
이제 Jenkins와 Sonarqube를 연동해 줄 것이다. 먼저 Jenkins에 Sonarqube Scanner 플러그인을 설치해준다.
그 다음 SonarQube Scanner 설정을 진행해준다.
Jenkins 관리 -> Global Tool Configuration -> SonarQube Scanner 추가 및 저장
Sonarqube 서버를 등록해준다.
Jenkins 관리 -> Configure System -> SonarQube servers -> Sonarqube URL (http://[sonarqube ec2 퍼블리 ip]:9000) 등록 -> save
이제 프로젝트 빌드시에 sonarqube로 코드를 검사할 수 있도록 추가해준다.
프로젝트 -> 구성 -> Build에 Execute SonarQube Scanner 추가 -> Analysis properties에 다음과 같이 작성 -> Invoke top-level Maven targets 과 Excute shell 사이에 Execute SonarQube Scanner 위치 -> save
sonar.login=0f3079e80a4c5f9ee81d4ceaf2f59b1ac287f914 # Sonarqube 토큰값 sonar.projectKey=jenkins # Sonarqube 프로젝트 생성 시 Key 값 sonar.projectName=jenkins # Sonarqube 프로젝트명 sonar.host.url=http://[sonarqube ec2 퍼블리 ip]:9000/ # Sonarqube 스케너가 구동되고 있는 ip:port sonar.report.export.path=sonar-report.json detekt.sonar.kotlin.config.path=default-detekt-config.yml sonar.sources=src/main/java,src/main/resources sonar.java.sourcesion=1.0 sonar.sourceEncoding=UTF-8 sonar.java.binaries=target/classes
프로젝트 빌드를 다시 실행하면 다음과 같이 빌드와 배포사이에 sonarqube를 이용한 코드검토가 이루어지는 것을 확인할 수 있다.
sonarqube 사이트로 다이 이동해서 프로젝트를 확인하면 잘 코드 검토가 이루어지는 것을 확인할 수 있다.
완성 ! ✨
(참고한 사이트 ✨)
https://yuhe-dogspaw.tistory.com/112
[Elastic search 시스템 환경설정] is too low, increase to at least..
안녕하세요. 오랜만에 글을 작성합니다. 최근에 엘라스틱 구동을 위해 시스템 환경설정을 하다가, 애를 먹은 적이 있어 자세히 기록해두고자 합니다. 그것은 바로! 1. [Elasticsearch] [1]: max number of t
yuhe-dogspaw.tistory.com
https://jungwoong.tistory.com/98
[SonarQube] SonarQube 설치 하기
사전 필요 작업 Java JDK SE 11버전을 설치합니다. 더보기 윈도우 다운로드 https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html 우분투 sudo apt install openjdk-11-jdk-headless..
jungwoong.tistory.com
https://zunoxi.tistory.com/105
CI/CD #11. Jenkins(젠킨스)와 Sonarqube(소나큐브) 연동
개요 jenkins와 sonarqube연동을 통한 소스 코드 정적 분석 파이프라인 구축 jenkins와 sonarqube 바로 전 포스팅에서 centos7에 sonarqube를 설치했다. 해당 서버는 jenkins가 설치되어있던 서버인데, 이번 포스.
zunoxi.tistory.com
[Jenkins] Jenkins와 SonarQube 연동하기
SonarQube와 Jenkins로 코드를 자동으로 정적 분석하여 코드의 품질을 확인합니다.
hsik0225.github.io
https://scshim.tistory.com/539
[Jenkins] 6장 - 소나큐브와 아티팩토리 설치 및 젠킨스와 연동하기
목차 · 소나큐브와 아티팩토리 설치 · 아티팩토리 설치와 설정 · 소나큐브와 아티팩토리는 둘 다 오픈소스 도구이며, 각각 정적 코드 분석과 바이너리 파일의 버전 관리를 한다. 소나큐브와
scshim.tistory.com
https://oingdaddy.tistory.com/381
AWS ec2에 sonarqube 설치하기
앞서 AWS ec2에 git, gitlab도 설치하고 Jenkins도 설치했었다. CI/CD가 구성되면 그다음은? 품질이다. 정적 소스 분석도구인 Sonarqube를 설치해보자. 기본적으로 java가 설치가 되어 있어야 하는데 이건 Jenk
oingdaddy.tistory.com
https://jungwoong.tistory.com/98
[SonarQube] SonarQube 설치 하기
사전 필요 작업 Java JDK SE 11버전을 설치합니다. 더보기 윈도우 다운로드 https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html 우분투 sudo apt install openjdk-11-jdk-headless..
jungwoong.tistory.com
https://kys9261.github.io/2019/05/02/programming/devops/how-to-install-sonarqube-on-ubuntu/
ubuntu에 SonarQube 설치하기
회사에서 혼자서 프로젝트를 진행하다보면 코드에 문제가 거나나 취약점 혹은 잠재적 에러 발상 부분에 대해서 스스로 파악하고 해결해야하는 문제점을 가지고 있습니다.저도 항상 그 부분때
kys9261.github.io
https://zunoxi.tistory.com/103
CI/CD #10. CentOS7 Sonarqube(소나큐브) 설치
개요 CentOS 7 환경에 Sonarqube 7.2 설치하기 Sonarqube 설치 오랜만에 삽질 포스팅을 한다. 거의 2일 꼬박 밤을 새우며 Sonarqube 설치에 매달렸는데, 여러 가지 시도 끝에 해결방법을 찾은 것 같다. Sonarqube
zunoxi.tistory.com
https://aws-diary.tistory.com/153
Sonarqube - Jenkins 연동 - 1. Sonarqube 설치
Jenkins에서 Sonarqube 정적검사를 하고, 퀄리티가 낮으면 배포가 되지 않도록 파이프라인에 넣는 부분을 작성하려합니다. 기존에 Ansible로 Sonarqube를 설치하는 글을 참고하셔서 설치하셔도 무방합니
aws-diary.tistory.com
소나큐브 적용기
SonarQube 란 정적 코드 분석을 자동을 수행하는 오픈 소스 플랫폼 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점에 대해서 검사하고 결과를 보고서로
giron.tistory.com
https://bantree.tistory.com/201
[Ubuntu] firewalld 방화벽 명령어
설치 $ sudo apt update && sudo apt install firewalld -y 버전확인 $ sudo firewall-cmd --version 방화벽의 모든 상태(포트 포워딩, 열린 포트 등)를 확인한다. firewall-cmd --list-all 포트 오픈 방화벽의 pu..
bantree.tistory.com
https://dololgun.github.io/sonarqube/sonarqube/
소나큐브 설치하기
개요
dololgun.github.io
https://ko.linux-console.net/?p=246#gsc.tab=0
Ubuntu 18.04에서 PostgreSQL을 설치하고 사용하는 방법
Ubuntu 18.04에서 PostgreSQL을 설치하고 사용하는 방법 PostgreSQL ( Postgres )은 오픈 소스의 강력하고 고급이며 고성능이며 안정적인 관계형 문서 데이터베이스 시스템입니다. 이 제품은 안전한 데이터
ko.linux-console.net
'Spring' 카테고리의 다른 글
Spring에서 HttpServletRequest의 반복적 읽기 (feat. Filter에서는 request 교체가 가능한 이유) (0) 2023.08.22 Transaction Propagation과 예외 전파 (0) 2023.02.12 [AWS + JENKINS + SONARQUBE] Spring 프로젝트 CI/CD 구현하기 2) CD 구현하기 ① (Jenkins 배포) (0) 2022.09.17 [AWS + JENKINS + SONARQUBE] Spring 프로젝트 CI/CD 구현하기 1) CI 구현하기 (Jenkins 설치 및 실행, Github연동(ssh, webhook)) (0) 2022.09.17 에러 페이지 반환하기 (Feat.ErrorController) (0) 2022.08.29