SQ Official Doc Link: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Extension+for+VSTS-TFS
SonarQube/SonarCloud Extension for TFS-VSTS |
Table of Contents
기능
Team Foundation Buid의 새로운 구조를 활용해 Visual Studio Team Services(VSTS)(구 VSO) 및 Team Foundation Server(TFS) 설치형 버전에서 빌드와 릴리즈를 통합할 수 있습니다., 이를 위해서는 여러분의 VSTS 계정 혹은 TFS 서버에 public extension이 설치되어 있어야 합니다. 이 확장 패키지를 사용해 SonarQube에서 지원하는 모든 언어를 분석할 수 있습니다.
호환성
- v3.x는 다음 시스템과 호환됩니다:
- TFS 2015 Update 3
- TFS 2017 Update 1
- VSTS
- v4.x는 다음 시스템과 호환됩니다:
- TFS 2017 Update 2+
- TFS 2018
- VSTS
SonarQube 5.6+ (LTS)
SonarQube Extension에는 SonarQube Scanner for MSBuild가 포함되어 있습니다.
SonarQube Extention | 3.1.0 | 4.1.0 |
---|---|---|
SonarQube Scanner for MSBuild | 4.0.0 | 4.0.2 |
설치
- 분석을 수행할 머신에 .NET framework v4.5.2+가 설치되어 있어야 합니다
- 분석을 수행할 머신에 Java Runtime Environment 8이 설치되어 있어야 합니다
- 마켓 플레이스에서 SonarQube extention을 설치합니다.
TFS manual install
Note: 사용하는 TFS 버전이 2017 Update 2 이전의 버전이 경우에는, 사용자가 직접 VSIX v3.x 최신버전을 다운로드 받아 설치하여야 합니다.
- VSIX는 GitHub 저장소의 릴리즈 페이지에서 다운로드할 수 있습니다.
- SonarQube Exstion 3.0 문서를 참조합니다.
사용
SonarQube 서비스 환경설정
가장 먼저 VSTS 프로젝트 설정에 SonarQube 서버를 서비스 엔드포인트로 설정해야 합니다. SonarQube 엔드 포인트 설정 문서를 참조합니다.
분석 설정 및 분석 수행
프로젝트 분석을 수행하기 위해서는, extension이 다음 3가지 태스크를 제공해야 합니다.
- Prepare Analysis Configuration 태스크. 이 태스크는 빌드를 실행하기 전 필요한 속성들을 설정합니다.
- 이 태스크는 반드시 필요합니다(mandatory).
- .NET solution 혹은 Java 프로젝트인 경우 MSBuild, Maven 및 Gradle 태스크를 활용해 유연하게 통합할 수 있습니다.
- Run Code Analysis 태스크. 이 태스크는 실제 소스 코드 분석을 수행합니다.
- Maven 혹은 Gradle 프로젝에서는 Maven/Gradle 빌드에서 scanner가 수행되므로, 이 태스크는 별도로 필요하지 않습니다.
- Publish Analysis Result 태스크. 이 태스크는 Quality Gate 상태를 빌드 요약 정보에 표시하며, 이 정보를 활용해 품질 관점에서 해당 애플리케이션이 프로덕션에 릴리즈 가능한지 판단할 수 있습니다.
- 이 태스크는 선택 사항입니다.
- 이 태스크는 SonarQube 분석이 종료될 때까지 대기하기 때문에, 빌드 시간이 크게 증가될 수 있습니다.
이 태스크들을 추가하려면, 태스크 검색창에 "SonarQube"를 입력합니다:
하나의 .NET solution 분석하기
- 빌드 정의에 다음을 추가합니다:
- 필수: Prepare Analysis Configuration 태스크, Run Code Analysis 태스크
- 선택: Publish Analysis Result 태스크
- 태스크 순서를 다음과 같이 조정합니다:
- Prepare Analysis Configuration: 모든 MSBuild 혹은 Visual Studio Build 태스크 이전
- Run Code Analysis: Visual Studio Test 태스크 이후
- Publish Analysis Result
- Prepare Analysis Configuration 빌드 스텝을 클릭하여 다음과 같이 설정합니다:
- SonarQube Server 섹션에서 사용할 엔드포인트(예를 들어, SonarQube Server 인스턴스)를 지정합니다:
- 드롭다운 리스트에서 기존 설정된 엔드포인트를 선택하거나
- 새로운 엔드 포인트를 추가하거나
- 기존 설정된 엔드포인트를 관리할 수 있습니다.
- Integrate with MSBuild 체크 박스에 체크합니다. 다음 값을 설정합니다(project key는 필수입니다):
- Project Key - SonarQube 인스턴스에서 관리하는 고유의 프로젝트 키 값
- Project Name - SonarQube 인스턴스에서 관리하는 프로젝트의 이름
- Project Version - SonarQube 인스턴스에서 관리하는 프로젝트의 버전
- 테스트 커버리지 리포트를 사용하고자 하는 경우, Additional Properties 텍스트 영역에 아래와 같이 입력할 수 있습니다:
sonar.cs.vscoveragexml.reportsPaths=**/*.coveragexml
- SonarQube Server 섹션에서 사용할 엔드포인트(예를 들어, SonarQube Server 인스턴스)를 지정합니다:
- Visual Studio Test 태스크를 클릭하고, Code Coverage Enabled 체크 박스에 체크를 하면 code coverage가 활성화되고 결과 보고서를 SonarQube에서 임포트할 수 있습니다(선택사항이지만 권장함).
모든 내용이 설정되었다면, 빌드를 수행할 수 있습니다.
Maven 혹은 Gradle로 Java 프로젝트 분석하기
Simple Project
Ant 빌드 스크립트에 sonar
Ant 타겟을 정의합니다:
<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> ...
프로젝트 베이스 디렉토리에서 다음 명령어를 실행하면 분석이 수행됩니다:
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 파일에 설정해야 합니다:
... <!-- 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
ant sonar -v
Advanced Usage
build.xml 파일 혹은 command-line 파라미터를 사용해 분석 파라미터를 추가 설정할 수 있습니다.
0 Comments