Analyzing with SonarQube Extension for VSTS/TFS
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 프로젝트 분석하기
- 빌드 정의에 다음을 추가합니다:
- (필수) Prepare Analysis Configuration 태스크 (하나 이상)
- (선택) Publish Analysis Result 태스크
- 위에서 추가한 태스크를 아래 순서로 정렬합니다:
- Prepare Analysis Configuration 태스크: Maven 혹은 Gradle 태스크 이전 위치
- Publish Analysis Result 태스크: Maven 혹은 Gradle 태스크 이후 위치
- Prepare Analysis Configuration 빌드 스탭을 다음과 같이 설정합니다:
- SonarQube 서버 선택
- Integrate with Maven or Gradle 선택
- Maven 혹은 Gradle 태스크의 Code Analysis 섹션에서 Run SonarQube or SonarCloud Analysis를 선택합니다.
다른 타입의 프로젝트 분석하기
.NET 어플리케이션 혹은 Java 프로젝트를 개발하지 않는 경우, 다음 방법으로 분석을 수행할 수 있습니다:
- 빌드 정의에 다음을 추가합니다:
- (필수) Prepare Analysis Configuration 태스크 및 Run Code Analysis 태스크 (하나 이상)
- (선택) Publish Analysis Result 태스크
- 위에서 추가한 태스크를 아래 순서로 정렬합니다:
- 1 - Prepare Analysis Configuration 태스크
- 2 - Run Code Analysis 태스크
- 3 - Publish Analysis Result 태스크
- Prepare Analysis Configuration 빌드 스탭을 다음과 같이 설정합니다:
- SonarQube Server 선택
- Use standalone scanner 선택
- 이후 다음과 같이 설정합니다:
- SCM에 저장된 sonar-project.properties 파일에 SonarQube 속성값들을 정의한 뒤, "Settings File" 항목이 해당 파일을 가르치도록 정확하게 지정하거나
- SCM을 사용하지 안흔ㄴ 경우, Manually provide configuration을 클릭한 뒤, 속성값들을 직접 입력합니다(호환성이 낮으므로, 권장하지 않음)
모든 내용이 설정되었다면, 빌드를 수행할 수 있습니다.
SonarCloud 사용자의 경우에는?
SonarCloud에서 프로젝트를 분석하는 경우, VSTS 익스텐션을 설치해야 합니다: https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud
SonarCloud는 이 페이지에서 설명한 모든 기능을 포함한 사용자 편의 기능을 제공합니다:
- 서비스 연결을 테스트할 수 있는 하나의 SonarCloud 전용 엔드포인트
- 사용자가 소속된 조직 지원 기능을 내장하고 있는 Prepare Analysis Configration 태스크
이 익스텐션을 사용할 경우, 빌드 정의에 SonarQube가 아닌 SonarCloud 태스크를 추가해야 합니다:
FAQ
Linux 혹은 macOS 에이전트에서의 분석을 트리거할 수 있습니까?
SonarQube 태스크 익스텐션은 4.0 버전부터 Noje.js로 완전히 새롭게 작성되어 해당 작업을 수행할 수 있습니다. 단, 아직 mono에 대한 의존성이 남아있으며 향후 해결할 계획입니다.
4.0 버전 이전의 익스텐션에서는 해당 기능을 지원하지 않습니다.
나의 풀 리퀘스트를 눈에 띄게 표시할 수 있습니까?
해당 기능은 현지 지원하지 않으나, 가까운 미래에 지원할 계획입니다.
이전버전(3.0)에서는 MSBuild를 사용해 분석한 .NET 솔루션에 대해서만 해당 기능을 지원합니다. 보다 자세한 내용은 여기를 참조하십시오.
품질 게이트 상태에 따라 빌드를 실패하도록 할 수 있습니까?
해당 기능은 4.0 버전의 익스텐션에서 지원하지 않습니다. CI의 빌드를 깨뜨리는 것을 올바른 방법이라고 생각하지 않습니다. 대신, 풀 리퀘스트 데코레이션(개발자가 새롭게 작성한 코드로 인해 새로운 이슈가 발생하지 않았음을 확인)을 제공하고, 품질 게이트의 상태를 릴리즈 프로세스의 하나로 고려하도록 할 계획입니다.
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 파라미터를 사용해 분석 파라미터를 추가 설정할 수 있습니다.
© 2017-2018 Moses Kim.
별도의 언급이 없는 한, 이 스페이스의 컨텐츠는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
SONARQUBE는 SonarSource SA의 트레이드 마크입니다. 모든 트레이트 마크 및 저작권은 각 소유자의 소유물입니다.
::: SonarQube 관련 문의 : 이메일 :::