Info |
---|
SQ Official Doc Link: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuildAnt |
By SonarSource – GNU LGPL 3 – Issue Tracker – Sources |
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
Table of Contents
|
기능
SonarQube Scanner for Ant를 사용해 Apache Ant 빌드 스크립트에서 SonarQube 분석을 수행할 수 있습니다.
호환성
SoanrQube Scanner for Ant v2.5는 SonarQube 5.6+와 호환됩니다.
사전 준비
- SonarQube가 설치되어 있어야 합니다
- SonarQube 서버가 지원하는 최소 버전의 Java가 하나 이상 설치되어 있어야 합니다
- 분석 대상 언어의 언어 플러그인이 설치되어 있어야 합니다
- 소스 코드 분석하기를 숙지합니다
- Ant v1.7.1+
설치
분석을 수행할 머신에 SonaQube Scanner for Ant를 다운로드 합니다.
사용
SonarQube Scanner for Ant는 Ant 태스크로 SonarQube Scanner의 wrapper입니다. 이 warpper는 SonarQube Scanner를 호출하고, sonar.* 의 파라미터를 SonarQube Scanner로 전달합니다. Any스러운 방법으로 동작하지는 않지만, 새로운 플러그인 혹은 SonarQube 자체가 제공하는 파라미터들을 즉시 활용할 수 있는 장점이 있습니다. 즉, SonarQube Scanner for Ant를 성공적으로 활용하려면 property 이름을 준수해야 합니다.
분석 파라미터 페이지를 참조해 Ant 기반의 분석 파라미터들을 추가로 확인할 수 있습니다.
Simple Project
Ant 빌드 스크립트에 sonar
Ant 타겟을 정의합니다:
Code Block | ||||
---|---|---|---|---|
| ||||
<project name="My Project" default="all" basedir="." xmlns:sonar="antlib:org.sonar.ant"> ... <!-- Define the SonarQube global properties (the most usual way is to pass these properties via the command line) --> <property name="sonar.host.url" value="http://localhost:9000" /> ... <!-- Define the SonarQube project properties --> <property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" /> <property name="sonar.projectName" value="Example of SonarQube Scanner for Ant Usage" /> <property name="sonar.projectVersion" value="1.0" /> <property name="sonar.sources" value="src" /> <property name="sonar.java.binaries" value="build" /> <property name="sonar.java.libraries" value="lib/*.jar" /> ... <!-- Define SonarQube Scanner for Ant Target --> <target name="sonar"> <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> <!-- Update the following line, or put the "sonarqube-ant-task-*.jar" file in your "$HOME/.ant/lib" folder --> <classpath path="path/to/sonar/ant/task/lib/sonarqube-ant-task-*.jar" /> </taskdef> <!-- Execute SonarQube Scanner for Ant Analysis --> <sonar:sonar /> </target> ... |
프로젝트 베이스 디렉토리에서 다음 명령어를 실행하면 분석이 수행됩니다:
Code Block |
---|
ant sonar |
분석하고자 하는 프로젝트의 루트 폴더에서 다음 명령어를 실행합니다:
Code Block SonarQube.Scanner.MSBuild.exe begin /k:"org.sonarqube:sonarqube-scanner-msbuild" /n:"Project Name" /v:"1.0" MSBuild.exe /t:Rebuild SonarQube.Scanner.MSBuild.exe end
분석을 위해 추가 파라미터를 설정해야할 경우 추가 파라미터 페이지를 참조하십시오.
커맨드 라인에서 분석 인증 정보(사용자 토큰)를 전달해야 하는 경우,/d:
옵션을 사용하십시오(예:/d:sonar.login=[my token value
)분석 종료 후 터미널에 표시되는 SonarQube UI Url을 브라우저에 입력하여 결과 페이지로 합니다.
기타
MSBuild 용 스캐너를 MSBuild 파이프라인의 일부로 구성할 수 있습니다. 이 경우 다음의 속성들이 변경됩니다:
- 프로젝트의 기존 코드 분석기들을 모두 제거하여, 이슈를 중복 식별하는 것을 방지합니다.
- SonarC# 및 SonarVB 분석기가 추가되며,
CodeAnalysisRuleSet
이 SonarQube의 quality profile에 맞추어 업데이트 됩니다. - SonarQube에 분석 보고서가 전송되기 전에 빌드가 깨지지 않도록
WarningAsError
기능이 비활성화 됩니다.
위의 변경 사항으로 인해 기존 빌드 프로세스에 악영향을 미치는 경우, SonarQube 분석을 위한 별도의 job을 생성할 것을 권장합니다. 또한,
- 프로젝트 빌드는
begin
/end
커맨드 사이에서 수행해야 합니다. 위 예제에서는/t:Rebuild
를 수행했습니다. - "
sonar.login
" 혹은 "sonar.password
"와 같은 민감한 속성은 보안상의 의유로 디스크에 보관하지 않습니다. 커맨드 라인 인자로 해당 속성을 전달하고자 하는 경우에도 해당 과정은begin
/end
사이에서 수행해야 합니다. - MSBuild 14.0+ 버전을 사용하지 않는 경우, Visual Studio 및 MSBuild와의 호환성 매트릭스를 확인하십시오.
샘플 프로젝트
github에서 대부분의 지원 언어를 포함하는 간단한 샘플 프로젝트를 제공하며, 리포지토리를 탐색하거나 샘플 프로젝트를 다운로드할 수 있습니다. projects/languages
디렉토리의 샘플 프로젝트를 확인하십시오.
알려진 제약 사항
Web Application 솔루션에 대한 분석은 지원하나, Web Site 솔루션에 대한 분석은 지원하지 않습니다.
트러블 슈팅
The End Step executable was not found
여러 분석을 빠르게 연속적으로 수행하고자 하는 경우에는 /nodereuse:false 인자를 msbuild 명령어로 전달하십시오. 그렇지 않은 경우, 새로운 분석 과정에서 요구하는 DLL이 이전 분석에 의해 점유되어 있는 경우 다음 오류를 만날 수 있습니다:
Code Block |
---|
The End Step executable was not found 'D:\***\.sonarqube\bin\MSBuild.SonarQube.Internal.PostProcess.exe'. Please check that the begin step, the build step and the end step are all executed in the same directory. |
End of Central Directory record could not be found
오래된 빌드 태스크로 인해 위 오류가 발생합니다. 최신 버전을 다운로드하여 설치하십시오.
더 보기
children보안
Execute Analysis 권한을 가지고 있는 사용자는 누구나 분석을 수행할 수 있습니다.
Anyone 그룹에 Execute Analysis 권한이 부여되어 있지 않거나, SonarQube 인스턴스에 보안 설정이 된 경우에는(sonar.forceAuthentication=true
) Execute Analysis 권한을 부여받은 사용자의 토큰값을 sonar.login 속성값으로 설정해야 합니다.
예: sonar-scanner -Dsonar.login=[my analysis token]
샘플 프로젝트
다음 링크에서 간단한 프로젝트 샘플을 다운로드 할 수 있습니다: https://github.com/SonarSource/sonar-scanning-examples/tree/master/sonarqube-scanner-ant
멀티-모듈 프로젝트
상위 및 하위 모듈의 환경 설정은 상위(parent) build.xml 파일에 설정해야 합니다:
Code Block | ||||
---|---|---|---|---|
| ||||
...
<!-- Set modules IDs -->
<property name="sonar.modules" value="module-one,module-two"/>
<!-- For modules, properties are inherited from the parent. They can be overridden as shown below: -->
<property name="module-one.sonar.projectName" value="Module One" />
<property name="module-one.sonar.sources" value="sources/java" />
<property name="module-one.sonar.binaries" value="target" />
<!-- Default module base directory is <curent_directory>/<module_ID>. It can be overridden if necessary -->
<property name="module-one.sonar.projectBaseDir" value="Module 1" />
... |
디버그 로그 활성화
일반적인 Ant verbose 옵션을 사용해 디버그 로그를 활성화 할 수 있습니다: -v
Code Block |
---|
ant sonar -v |
Advanced Usage
build.xml 파일 혹은 command-line 파라미터를 사용해 분석 파라미터를 추가 설정할 수 있습니다.