이 문서는 Linux 환경에서 SonarQube Scanner를 이용하여 C 빌드를 수행하는 방법에 대하여 가이드한다.
1. SonarQube Scanner 설치
다음 링크를 통해 SonarQube Scanner를 설치한다.
2. 빌드 환경 준비
C/C++ 프로젝트는 SonarQube Build Wrapper가 필요하다. Build Wrapper는 C/C++ 프로젝트로부터 정보를 수정하는 역할을 하며, 빌드에 영향을 주지 않는다.
2.1 Build Wrapper 다운로드
다음 경로를 통해 Build Wrapper를 다운로드 할 수 있다.
- http://소나큐브주소/static/cpp/build-wrapper-linux-x86.zip
Build Wrapper 다운로드 링크
wget https://sonarsource.bintray.com/CommercialDistribution/sonar-cpp-plugin/build-wrapper-3.11.zip
2.2 압축 해제
다운로드 받은 Build Wrapper를 적절한 폴더로 압축 해제한다.
unzip build-wrapper-3.11.zip
압축 해제 후 다음과 같이 구성된다.
- linux-x86-32
- linux-x86-64
- build-wrapper-linux-x86-65
- macosx-x86
- win-x86-32
- win-x86-64
자신의 환경에 맞는 build-wrapper를 선택이 필요하다.
2.3 PATH에 해당 경로 등록
PATH에 해당 경로를 등록하거나 빌드 시 전체 경로를 이용하여 수행할 수 있다.
3. Build Wrapper를 통한 빌드 및 분석
3.1 Sample 파일 다운로드
만약 C/C++ 샘플 파일은 다음 Github에서 다운로드 받을 수 있다.
3.2 sonar-project.properties 수정
C/C++ 프로젝트의 루트에 sonar-project.properties 파일을 만들고 적당한 값을 입력한다.
아래 Sample 파일을 참고한다.
sonar.projectKey=org.sonarqube:cpp-build-wrapper sonar.projectName=Example of C/C++ Scan (with BuildWrapper) sonar.projectVersion=1.0 sonar.sources=. #sonar.sources=src sonar.language=cpp # The build-wrapper output dir sonar.cfamily.build-wrapper-output=bw-outputs # Encoding of the source files sonar.sourceEncoding=UTF-8 # SonarQube location sonar.host.url=http://10.0.1.2 # Key 방식의 로그인 시 인증 정보 # sonar.login=cbcf225a4f5015201228c0fdf9 # ID/PW 로그인 시 sonar.login = admin sonar.password = admin
3.3 빌드 및 분석 수행
다음과 같이 build-wrapper-linux-x86-64를 통해 빌드를 수행한다.
build-wrapper-linux-x86-64 --out-dir bw_output make clean all sonar-scanner
만약 상단의 예제 파일을 이용하였다면, 다음과 같이 구성할 수 있다.
/build-wrapper-linux-x86-64 --out-dir bw-outputs ./build.sh sonar-scanner
분석 완료 후 bw-outputs 폴더에 다음 파일이 생성된다.
- build-wrapper-dump.json
- build-wrapper.log.
4. Bamboo에서 빌드 플랜 구성
4.1 Source Code Checkout
저장소로부터 소스 코드를 Checkout하기 위한 Task 설정한다.
4.2 빌드 수행
빌드를 위한 Task를 구성한다. 아래와 같이 구성할 수 있다.
/data/sonarqube/build-wrapper-linux-x86/build-wrapper-linux-x86-64 --out-dir bw-outputs ./build.sh
4.3 Sonar Scanner 수행
기본 Sonar Scanner 수행한다.