이 문서는 소나큐브를 활용한 코드 분석에 대해 설명합니다.




개요

SonarQube는 프로젝트의 메인 브랜치를 분석할 수 있으며, Developer Edition부터는 여러 브랜치와 풀 리퀘스트도 분석할 수 있습니다.


SonarScanner를 사용한 코드 분석

SonarScanner는 소스 코드 분석을 수행하는 독립 실행형 프로그램으로, CI/CD 호스트에서 실행되며 분석 결과를 SonarQube 서버로 전송합니다.

SonarQube 서버는 결과를 계산하고 품질 게이트(Quality Gate)를 산출하며 리포트를 생성합니다.

SonarScanner는 설치 시 SonarQube 서버에서 필요한 언어 분석기를 다운로드하여 사용합니다.

SonarQube는 Gradle, Maven, .NET, NPM, Python 등의 빌드 시스템과 통합된 SonarScanner를 제공하며, 기타 프로젝트의 경우 SonarScanner CLI를 사용해 수동 설정으로 분석을 수행할 수 있습니다.


분석 과정

SonarQube의 기본적인 분석 과정은 다음과 같습니다.

  1. CI 파이프라인이나 빌드 프로세스가 SonarScanner를 시작합니다.
  2. SonarScanner는 로컬 저장소를 스캔하고 설정된 분석 범위에 따라 분석할 파일을 결정합니다.
  3. SonarScanner는 요청을 언어 분석기에 전달하고, 언어 분석기는 파일을 가져와 구성된 품질 프로필에 따라 분석을 수행합니다.
  4. 분석 결과(품질 측정 및 이슈)는 SonarScanner로 전달되고, SonarScanner는 이를 SonarQube서버에 보고서 형태로 전송합니다.
  5. SonarQube 서버는 다음을 수행하기 위해 비동기적으로 분석 결과를 계산합니다.

기본적으로 SonarQube의 에디션이 인식할 수 있는 파일만 분석 대상에 포함됩니다.

예를 들어, Community Edition은 Java와 JavaScript를 지원하므로 .java.js 파일은 분석하지만, C++은 지원하지 않으므로 .cpp 파일은 무시됩니다.


CI 파이프라인에 통합

CI 파이프라인에 SonarQube 분석을 통합하면 프로젝트에 다음과 같은 분석 기능을 사용할 수 있습니다. 

  • 메인 브랜치 분석
  • (Developer Edition 이상부터) 풀 리퀘스트 분석, 여러 브랜치 분석


SonarQube를 통합한 CI 파이프라인 단계는 다음과 같습니다.


  1. 개발자가 원격 저장소(Remote repository)에 브랜치에 변경 사항을 push합니다.
  2. 특정 브랜치에 대한 CI 파이프라인이 트리거됩니다.
    이를 위해 소스 제어 관리(SCM) 시스템에서 이벤트가 발생할 때 웹훅을 사용하거나 Jenkins와 같은 CI/CD 도구로 리포지토리를 모니터링할 수 있습니다.
  3. 파이프라인은 원격 저장소를 클론하고, CI/CD 호스트의 로컬 저장소에 관련 브랜치를 체크아웃합니다.(코드와 SCM 메타데이터가 복사됩니다.)
  4. 컴파일된 프로그래밍 언어의 경우 파이프라인이 코드를 빌드합니다.
  5. 파이프라인은 적절한 Sonar Scanner를 실행하여 코드를 분석합니다.
  6. SonarScanner는 분석 결과를 SonarQube 서버로 전송하고,SonarQube 서버는 이를 처리합니다.
  7. (선택 사항) 서버는 품질 게이트 결과를 CI 파이프라인에 전달합니다.
  8. 파이프라인은 품질 게이트를 통과하면 계속 진행되고, 실패하면 중단됩니다.


분석 시점에 스캐너 엔진 및 분석기 다운로드

SonarScanner는 스캐너 부트스트래퍼(scanner bootstrapper)로,

분석 시점에 SonarQube Server로부터 스캐너 엔진과 언어 분석기(language analyzers)를 자동으로 다운로드합니다.


이 방식은 다음과 같은 이점을 제공합니다:

  • 스캐너 엔진과 분석기의 버전이 SonarQube Server와 항상 호환되도록 보장합니다.
  • 프로젝트에서 실제로 사용된 언어에 필요한 분석기만 선택적으로 다운로드하여 효율적인 분석이 가능합니다.


분석 프로세스 요약

  1. 빌드 또는 CI 파이프라인이 SonarScanner를 실행합니다.
  2. SonarScanner는 SonarQube Server에 연결하여 사용할 스캐너 엔진 버전을 확인합니다.
    • 먼저 로컬 캐시에 해당 엔진 버전이 있는지 확인하고,
    • 없으면 SonarQube Server에서 다운로드한 후 캐시에 저장합니다.
  3. 스캐너 엔진은 프로젝트의 코드를 스캔하여 어떤 언어들이 사용되었는지 식별합니다.
  4. 스캐너 엔진은 분석에 필요한 언어 분석기를 캐시에서 확인하고,
    • 없을 경우 SonarQube Server에서 필요한 분석기를 다운로드하여 캐시에 저장한 후 사용합니다.




참조 링크


  • 레이블 없음