Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


By SonarSource  MIT GNU LGPL 3  Issue Tracker  Sources 

SonarQube Scanner for
MSBuild 4.0.0.821
Ant 2.5 Compatible with SonarQube 5.6
.7
+ (LTS) 
Download


Panel
borderColor#C3CCD7
bgColor#FCFCFC

Table of Contents

Table of Contents
maxLevel3
indent16px


기능

SonarQube Scanner for MSBuild는 SonarSource와 Microsoft 가 협업을 통해 개발 및 제공하며, MSBuild 프로젝트 및 솔루션을 SonarQube로 분석하기 위해 권장합니다.커맨드라인 명령어를 통해 사용 가능하며, VSTS-TFS 및 Jenkins의 빌드 스텝으로 활용할 Ant를 사용해 Apache Ant 빌드 스크립트에서 SonarQube 분석을 수행할 수 있습니다.

설치

호환성

  1. .NET Framework v4.6+ 를 설치합니다.
  2. Java Runtime Environment 8을 설치합니다.
  3. 최신 버전의 SonarQube Scanner for MSBuild 를 다운로드 합니다(이 페이지 상단의 링크를 참조하십시오).
  4. zip 파일의 블럭을 해제합니다(마우스 우 클릭 file > Properties > Unblock).
  5. sonar-scanner-msbuild-[version].zip 파일의 압축을 풉니다. (예: C:\SonarQube\bin)
  6. C:\SonarQube\bin\SonarQube.Analysis.xml  파일의 다음 파라미터를 입력합니다:
    1. sonar.host.url - 사용할 SonarQube 서버의 URL

    2. sonar.login - Execute Analysis 권한을 가진 사용자의 사용자 토큰 값을 입력합니다. Anonymous 계정이 해당 권한을 가지고 있지 않은 경우 이 값을 입력해야 합니다
  7. SonarQube.Analysis.xml 파일에 대한 접근권한을 적절하게 설정해, 불필요한 수정을 방지합니다.
  8. %PATH% 환경 변수에 실행 파일이 위치한 디렉토리를 추가합니다.

사용

분석하고자 하는 프로젝트의 루트 폴더에서 다음 명령어를 실행합니다:

Code BlockSonarQube.Scanner.MSBuild.exe begin /k:"

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
languagebash
titlebuild.xml
<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-
msbuild
ant"
 /n:"Project Name" /v:
 />
<property name="sonar.projectName" value="Example of SonarQube Scanner for Ant Usage" />
<property name="sonar.projectVersion" value="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
     />
    <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

    보안

    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
    languagebash
    titleParent build.xml
    ... 
    <!-- 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 파라미터를 사용해 분석 파라미터를 추가 설정할 수 있습니다.