프로젝트를 하면서 pr를 날릴 때 code smell이 나는 코드들이 불필요하게 push 되어 리뷰의 효율이 안나는 상황이 발생해, 정적 분석 도구의 필요성을 느끼게 되어 적용하기로 했다.
정적 프로그램 분석
(static program analysis
)은 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것을 말한다. 대부분의 경우에 분석은 소스 코드
의 버전 중 하나의 형태로 수행되며, 가끔은 목적 파일
형태로 분석된다. 이에 반하여 실행 중인 프로그램을 분석하는 것을 동적 프로그램 분석
이라고 한다. - wikipedia
쉽게 말해서 정적 분석은 프로그램이 실행 되지 않은 상태에서 소스 코드를 분석해 프로그램을 분석 하는 방식이다.
나는 여러 정적 분석 도구 중 sonaqube를 사용했다.
→ 관련 레퍼런스가 많기 때문!
나는 SonarQube용 ec2를 따로 생성했고, 도커를 이용하여 설치했다.
$ docker pull sonarqube
docker run -d --name sonarqube -p 8080:9000 sonarqube
-d
: 컨테이너를 데몬 프로세스로 실행.-name
: 컨테이너 이름 설정-p
: -p [host(외부)의 port]:[container(내부)의 port]
로 설정설치 후 8080포트로 접근을 해보면 sonarqube 창이 뜬다
첫 대시보드를 캡처를 못해서, 현재 프로젝트가 있는 상태로 이미지를 첨부 하였다.
다음과 같이 토큰 생성
토큰은 꼭 복사 해둘 것!
나는 gradle로 프로젝트를 관리하기 때문에 gradle 클릭
해당 플러그인을 프로젝트에 주입해주면 된다.
하단에 있는 쉘 스크립트를 사용해 정적 분석을 실행한다.
이제 jenkins에 방금 생성한 sonarqube 프로젝트를 적용해보자.
Pipeline에 정적 분석 명령 추가
stage('sonarqube-run'){
steps{
sh '''
./gradlew sonarqube \
-Dsonar.projectKey=sonarqube-test \
-Dsonar.host.url=http://43.201.18.36:8080 \
-Dsonar.login=sqp_c47790b1db057ddeb6fd03c0305532106b7c9a
'''
}
}
빌드 실행 - 젠킨스 파이프라인으로 실행
잘 동작한다.
소나큐브에 접속 하면 정적 분석 결과를 볼 수 있다.