Always-Try(정보보안 및 일상)

[DevSecOps] Jenkins CI/CD 파이프라인 SonarQube 통합 (2/3) - Sonarqube 설치 및 Jenkins 연동 본문

Unclassified

[DevSecOps] Jenkins CI/CD 파이프라인 SonarQube 통합 (2/3) - Sonarqube 설치 및 Jenkins 연동

Always-Try 2022. 2. 14. 19:33
https://yeonyeon.tistory.com/83

 

먼저 www.sonarqube.org/downloads/ 에서 Sonarqube Community Edition을 설치한다. 

필자는 C:\Program Files 아래에 압축을 풀었고, 압축이 풀린 폴더의 bin 디렉터리에서 StartSonar.bat 파일을 우클릭하여 관리자 권한으로 실행 후 http://localhost:9000 으로 접속하면 접속이 가능하다. (초기계정 admin/admin)

 

 

다음으로 https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ 에서 본인의 OS에 맞는 Sonarqube Scanner를 다운로드하고 압축을 해제한다.

 

그 후 sonarqube에서 새로운 프로젝트를 생성한다.

 

Jenkins와 연동할 토큰도 새로 만들자.

My Account > Security > Generate Tokens

그리고 Jenkins 플러그인으로 SonarQube Scanner를 설치해주자. (Jenkins 관리 > 플러그인 관리 > 설치 가능 > Sonar 검색)

 

계속 기다려도 자동으로 재시작이 안되서 그냥 실행중인 jenkins 프로세스를 종료했다가 다시 실행했다.

 

다음으로 Jenkins 관리 > Global Tool Configuration > SonarQube Scanner > Add SonarQube Scanner 에서 SonarQube Scanner를 등록해준다. 아까 설치한 SonarQube Scanner 경로를 지정해주는 것으로 예상했는데, 새로 설치하도록 메뉴를 안내하고 있다.

 

 

이제 아까 발급한 sonarqube 토큰을 jenkins에 등록해주도록 하자. (Jenkins 관리 > 시스템 설정 > SonarQube Servers)

 

이후 프로젝트에서 빌드 과정에 SonarQube Scanner를 추가해주도록 하자.

적용할 프로젝트 > 구성 > Build > Add build step > Execute SonarQube Scanner > Analysis properties 

sonar.login=b5b113ea36416fddf79f214bb6694cb902798277 
sonar.projectKey=always-try  
sonar.projectName=always-try   
sonar.host.url=http://localhost:9000/    
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8

 

이후 Build Now 후 Jenkins 로그를 통해 어떻게 진행되는지 보자. 빌드 과정에서 SonarQube로 소스코드 분석을 요청하고 동작하고 있는 것을 확인할 수 있다.

이제 SonarQube로 이동해보면 아무것도 없없던 Project 옆에 'Passed'라는게 생겼고 숫자도 모두 미묘하게 조금씩 변해져있다. 1 Line의 파이썬 코드가 1개 있었는데, 잘 검사가 된 것으로 보이고, 특이사항이 없어서 빌드까지 완료된 것으로 보인다.

 

그리고 화면 위쪽에 warning이 떠있어서 봤더니 아래와 같이 파이썬 2, 3 버전에 대해 특정할 수 있다는 내용이다.

 

그럼 이제 기본적인 테스트는 되었고, 취약한 코드를 github에 올리고 jenkins에서 빌드해봤을때 SonarQube에서 어떻게 나오는지 확인해보자.

 

먼저 https://covenant.tistory.com/115 에서 취약하다고 하는 코드를 필자의 PC 내 repository 생성한다. 이후 Github Desktop을 통해 commit과 push를 하고, Jenkins에서 Build Now를 실행시켜보자. (지난 포스팅에서 GIthub push Webhook timed out 이슈 때문에 수동으로 Build Now를 클릭한다는 점 참고.)

결과는?!

  • PC 내 repository에 취약한 코드 생성: 성공
  • Github commit & push: 성공
  • Jenkins 빌드 및 배포: 성공
  • SonarQube 코드 정적 분석: Failed

SonarQube Failed가 나왔는데 빌드 및 배포가 되었다. 순서에 문제가 있는 것인가? 이것은 추후 확인해보도록 하고 다음번엔 https://sonarqubekr.atlassian.net/wiki/spaces/SON/pages/11894857/SonarQube 에 있는 예제를 통해 SonarQube에 대해서 더 알아보도록 하자.

Comments