DevOps/CI&CD

EC2에 SonarQube 설치 & Jenkins로 코드 분석하기

Code Maestro 2023. 4. 27. 14:49
728x90

1. SonarQube란?

출처:https://docs.sonarqube.org/latest/

소스 코드의 실행 없이 정적으로 프로그램의 문제를 찾는 정적 분석 도구입니다.

 

지속적인 통합과 분석을 할 때 사용되는 솔루션으로 코드의 품질을 높이기 위해서 코드의 이슈, 복잡성 등을 분석해서 코드가 사용할 수 있는 가용 범위 혹은 문제가 있는 코드를 분석해 줍니다. 버그를 찾는다든가 아니면 취약성 있는 코드를 찾을 수 있다. 또한, 코드 smell을 감지하여 불필요한 코드와 코드의 이상 여부를 체크할 수 있습니다. 이러한 작업을 통해서 코드의 품질을 높일 수 있습니다.

 

 

다양한 언어에 SonarQube가 사용이 되고, 특히 CI/CD 부분에서 자주 사용이 됩니다. 

 

2. 프로젝트에 SonarQube 적용

기존 프로젝트의 build.gradle 파일을 수정해줍니다. 

 

기존 plugins에서 id "org.sonarqube" version "3.0" 추가하여, Sonarqube 플러그인 의존성을 추가합니다. 

 

3. EC2 서버에 설치하기

SonarQube는 EC2 환경에서 T2.micro로 되긴 하지만...

 

규모가 일정 수준 이상인 프로젝트는 리소스가 워낙 많이 들어가서 SonarQube가 안 돌아갑니다. SonarQube 실행이 안 돼 렉이 심해서 안 돌아가는 분들에게는 T2.small 이상으 업그레이드 하시는 걸 추천드립니다. 

 

아래의 설치 과정은 OS가 Ubuntu 기준입니다. 

 

/opt로 이동해서 sonarqube 디렉토리를 만들어줍니다. 

 

 

sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-(특정 버전).zip 명령어 

 

sudo unzip sonarqube-(특정 버전).zip 명령어로 압축해제 

 

sudo chown -R ubuntu:ubuntu /opt/sonarqube 권한 변경.(root 권한이 아닌 경우 실행이    있다.)

설치된 폴더에 이동하여 ls -al 명령어로 Bin이라는 폴더에 sonarqube 실행할 있는 권한이 있을 겁니다.

 

 

 

Conf 폴더에 sonarqube 설정을 바꿀  있습니다.

옆에 숫자가 뜨는데 그 행의 위치를 나타내줍니다. 

 

포트 번호는 디폴트로 9000으로 되어있습니다. 옆에 # 글자를 삭제하고, 포트 번호를 변경하면 원하는 포트대로 설정할 수 있습니다.

 

 

이제 본격적으로 SonarQube를 EC2 서버에 실행하도록 하겠습니다. 

 

Bin 폴더에 가보면 

 

Sonarqube를 실행할 수 있는 명령어들이 linux, macosx 등이 있습니다.

 

Ec2는 linux 환경 64비트이기에 linux-x86-64 폴더에 들어갔습니다.

 

./sonar.sh status 명령어로 소나큐브 상태를 확인할 수 있습니다. 

 

Start 명령어로 실행하게 만듭니다.

 

실행됨을 알 수 있습니다.

 

 

만약 SonarQube 실행 포트를 8500번으로 설정했다면 

 

Ec2 서버에 8500번 포트를 보안 그룹에 추가해야 해당 URL로 들어갈 수 있습니다. 

 

 

EC2 서버의 URL로 들어가면 

정상적으로 접근할 수 있습니다.

 

 

만약 처음 SonarQube에 들어가셨다면 위의 이미지처럼 로그인 화면이 나오는데 원하는 정보를 기입하여 비밀번호를 바꿀 수 있습니다.

 

 

 

이제 이 SonarQube를 사용하려면 토큰 번호를 등록해야 합니다.

 

로그인을 하면 위의 이미지처럼 뜨는데

 

오른쪽 상단의 My Account 클릭 

Security 항목에서 Name, Type, Expires를 채워주고 Generate를 누르면 토큰이 생성됩니다.

 

이때 토큰은 한 번밖에 노출이 안 되니 꼭 어딘가에 적어두시는 걸 추천드립니다. 

 

4. Jenkins에서 SonarQube 설정

이제 위에 생성한  token으로 Jenkins에서 SonarQube를 설정해보겠습니다. 

Manage Credentials에 들어갑니다. 

Secret EC2 서버에 설치된 sonarqube 토큰 값,  ID에는 자신이 원하는 이름 지정, Description에는 설명을 넣어주고 Create 버튼을 눌러 생성해줍니다. 

 

 

다시 대시보드에 가서 시스템 설정을 누릅니다.

 

SonarQube servers 항목에서 이름은 자신이 원하는대로 임의로 지정하고, URL sonarqube 설치된 EC2 서버의 url 입력해 줍니다. Token에는 이전에 credential에서 등록한 걸 추가해줍니다. 

이러면 Jenkins에서 기본적인 SonarQube 세팅은 끝났습니다.

 

 

 

5. Jenkins에서 SonarQube 실행

두 가지 방식이 있습니다. 

 

1) Pipeline 

 

스크립트를 아래와 같이 입력해줍니다. 

 

withSonarQubeEnv 에는 이전에 설정 sonarqube 이름을 등록해주고, /gradlew sonarqube 실행해줍니다. 

 

 

2) Item

기존 Jenkins의 프로젝트에서 FreeStyle로 작성된 걸 의미합니다.

Execute SonarQube Scanner 항목을 선택합니다. 

  • sonar.login: sonarqube가 설치된 서버의 id를 입력
  • sonar.password: sonarqube가 설치된 서버의 패스워드를 입력
  • sonar.source: 스캔할 소스파일들의 위치를 지정합니다. 
  • sonar.projectName: sonarqube에 등록할 프로젝트명을 입력합니다.
  • sonar.language: 언어를 입력합니다.
  • sonar.binaries: 이제는 클래스 파일도 넣어줘야 분석이 가능합니다. 설정을 안 해주면 오류가 발생합니다. 

 

위의 설정 내용은 

SonarQube가 설치된 서버에서 프로젝트를 만들 때, 설정이 가능합니다. 

 

 

각각 다른 방식으로 실행을 해보면 

SonarQube가 설치된 EC2 서버에 코드가 검사  확인할  있습니다. 

728x90