• 본 가이드는 Linux 기준 Buildroot 기반 C/C++ 프로젝트에서
    SonarQube CFamily 분석을 수행하기 위한 절차를 안내합니다.
    특히 전체 프로젝트가 아닌 독립적으로 빌드 가능한 모듈 단위 분석 검증을 목표로 합니다.

  • SonarQube 서버에 접근 가능하며, SonarScanner CLI 설치 및 실행이 가능한 상황을 전제합니다.

  • 본 문서의 명령어는 예시이며, 환경에 맞게 수정해야 합니다.

분석용 Token 발급 및 환경 변수 설정


로그인 후 계정 아이콘을 클릭하여 아래와 같은 메뉴 페이지에 접속합니다.
Name과 Type (Global Analysis Token)을 선택 후 Generate 버튼을 누릅니다.
발급한 토큰은 재확인할 수 없으므로 안전한 위치에 보관합니다.


 


해당 토큰 값과 서버 URL을 환경 변수로 지정합니다.

export SONAR_TOKEN="sqa_xxxxxxxxxxx"
export SONAR_HOST_URL="http://sonarqube-ip:9000"


build-wrapper로 클린 빌드 과정 캡처


Buildroot 환경 특성상, 실제 컴파일이 하위 Makefile 또는 스크립트에서 수행될 수 있습니다.

상위 make만 감싸면 캡처가 누락될 수 있으므로, 필요 시 실제 컴파일이 발생하는 위치에서 build-wrapper 실행이 필요합니다.


프로젝트 루트 디렉토리로 이동하여
분석 설정 파일과 build-wrapper 산출물을 분리하기 위해 작업 디렉토리를 생성합니다.

cd /project/root/dir
mkdir -p sonar/<module-name>
cd sonar/<module-name>


build-wrapper가 정상적으로 컴파일 과정을 캡처하였는지 확인합니다.

compile_commands.json 이 비어 있거나 항목 수가 비정상적으로 적다면,
실제 컴파일 명령이 build-wrapper가 캡처 가능한 프로세스에서 수행되었는지 확인해야 합니다.

ls -l bw-output/compile_commands.json


sonar-project.properties 파일 생성


properties 파일을 생성하지 않고, sonar-scanner 커맨드에 모든 옵션을 인라인으로 넣을 수 있습니다. 

sonar-scanner \
  -Dsonar.projectKey=my_module_name \
  -Dsonar.sources=../../src/module_name_1,../../src/module_name_2 \
  -Dsonar.cfamily.compile-commands=bw-output/compile_commands.json


sonarqube 분석 설정을 담는 파일을 생성합니다.

vi sonar-project.properties
# projectKey는 서버 내에서 중복되지 않는 값이어야 합니다.
sonar.projectKey=my_module_name

sonar.projectName=My Module Test

# build-wrapper를 통해 실행한 빌드 명령의 대상이 되는 소스의 범위와 일치해야 합니다.
# 분석하려는 자체 작성 모듈만 확인하려는 경우에도, 
# 해당 모듈은 실제 빌드 캡처 대상에 포함되어 있어야 합니다.
sonar.sources=../../src/module_name_1,../../src/module_name_2

# build-wrapper로 생성된 compile_commands.json 파일 경로를 지정합니다.
sonar.cfamily.compile-commands=bw-output/compile_commands.json

# generated files, third party 등 분석에서 제외할 디렉토리 및 파일을 작성합니다.
# glob 패턴 문법을 사용합니다.
sonar.exclusions=**/generated/**,**/third-party/**,**/*.xml

# 필요한 경우
sonar.sourceEncoding=UTF-8


스캐너 실행

분석 프로젝트의 규모가 큰 경우 스캐너 메모리 설정을 늘릴 수 있습니다.

export SONAR_SCANNER_JAVA_OPTS="-Xmx2g"

디버그 옵션 -X 을 통해 자세한 로그를 추적할 수 있습니다.

sonar-scanner -X


  • 레이블 없음