Versions Compared

Key

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


By SonarSource – GNU LGPL 3 – Issue Tracker  Sources

SonarQube Scanner for Jenkins 2.6.1 


Panel
borderColor#C3CCD7
bgColor#FCFCFC

Table of Contents

Table of Contents
maxLevel3
indent16px


기능

이 플러그인을 사용하면 Jenkins 글로벌 환경 설정에서 SonarQube 서버 환경을 설정할 수 있습니다.

이후 표준 Jenkins Build Step으로 SonarQube 분석을 다음 Scanner로 수행할 수 있습니다:

Jenkins의 job이 완료되면, 이 플러그인 SoanrQube 분석 여부를 식별하고 job 페이지에  SonarQube  배지를 표시합니다. 해당 배지를 클릭하면 SonarQube 대시보드로 이동해 quality gate 상태를 확인할 수 있습니다.

SINCE 2.5 : Jenkins Pipeline DSL 도 사용할 수 있습니다(일부 기능은 SonarQube v6.2 이상에서만 동작합니다).

호환성 매트릭스

SonarQube Scanner for Jenkins2.12.2.12.32.42.5 - 2.6
Jenkins1.491+1.580.1+1.587+1.587+1.651+


SINCE 2.5 JRE8 이상을 사용하여 분석해야 합니다

설치

Install the

설치하기

  1. Jenkins 업데이트 센터에서 SonarQube Scanner for Jenkins
via the Jenkins Update Center.Configure your SonarQube server(s)Log into Jenkins as an administrator and go to 
  1. 플러그인을 설치합니다.
  2. SonarQube  서버를 아래와 같이 설치합니다:
    1. 관리자로 로그인 후 Manage Jenkins > Configure System
  • Scroll down to the SonarQube configuration section, click on Add SonarQube, and add the values you're prompted for.
  • Use

    Analyzing with the SonarQube Scanner

    Global Configuration

    This step is mandatory if you want to trigger any of your SonarQube analyses with the SonarQube Scanner. You can define as many scanner instances as you wish. Then for each Jenkins job, you will be able to choose with which launcher to use to run the SonarQube analysis.

    Log into Jenkins as an administrator and go to 
      1. 항목으로 이동합니다.
      2. SonarQube configuration 섹션에서 Add SonarQube를 클릭한 후, 필요한 설정값을 입력합니다.

    사용하기

    SonarQube 스캐너로 분석하기

    Global Configuration

    SonarQube Scanner를 사용해 SonarQube 분석을 수행하려면, 이 단계를 반드시 수행해야 합니다. 원하는 만큼의 스캐너를 설정한 뒤, 개별 Jenkins job에서 원하는 런처를 선택해 SonarQube 분석을 수행할 수 있습니다:

    1. Jenkins에  administrator 계정으로 로그인 한 뒤, Manage Jenkins > Global Tool Configuration
    Scroll down to the SonarQube Scanner configuration section and click on 
    1. 페이지로 이동합니다.
    2. SonarQube Scanner 설정 영역으로 이동한 뒤, Add SonarQube Scanner
    . It is based on the typical Jenkins tool auto-installation. You can either choose to point to an already installed version of SonarQube Scanner (uncheck
    1. 를 클릭합니다. 기본적으로  Jenkins 도구를 자동설치하도록 설정되어 있습니다. 이미 설치한 Scanner를 선택하거나('Install automatically'
    ) or tell Jenkins to grab the installer from a remote location (check
    1. 체크 박스 해제) Jenkins가 특정 버전을 설치하도록 할 수 있습니다('Install automatically' 체크 박스 선택)
    :
    If you don't see a drop down list with all available SonarQube Scanner versions but instead see an empty text field then this is because Jenkins still hasn't downloaded the required update center file (default period is 1 day). You may force this refresh by clicking 'Check Now' button in Manage Plugins > Advanced tab
    1. .

    Jenkins가 업데이트 센터 파일을 다운로드하지 않은 경우(기본적으로 1일에 1회 다운로드)에는 사용 가능한 SonarQube Scanner 버전을 리스트에서 확인할 수 없을 수 있습니다. Manage Plugins > Advanced 탭에서 'Check Now' 버튼을 클릭해 강제로 업데이트 센터 파일을 다운로드 할 수 있습니다.

    Job Configuration

  • Configure the project, and scroll down to the Build section. 
  • Add the SonarQube Scanner build step to your build.
  • Configure the SonarQube analysis properties. You can either point to an existing 
    1. Job > Configure > Build 섹션으로 이동합니다.
    2. 빌드 스텝에 SonarQube Scanner를 추가합니다.
    3. SonarQube 분석 파라미터를 설정합니다. 기존 sonar-project.properties
     file or set the analysis properties directly in the Analysis properties fieldAnalyzing with
    1. 파일을 지정하거나, Analysis properties 필드에 분석 파라미터를 직접 입력할 수 있습니다.

    SonarQube Scanner for

    MSBuild

    MSBuild로 분석하기

    Global Configuration

    This step is mandatory if you want to trigger any of your analyses with the 

    SonarQube Scanner for MSBuild

    . You can define as many scanner instances as you wish. Then for each Jenkins job, you will be able to choose with which launcher to use to run the SonarQube analysis.
  • Log into Jenkins as an administrator and go to Manage Jenkins Global Tool Configuration

  • Click on 

    를 사용해 SonarQube 분석을 수행하려면, 이 단계를 반드시 수행해야 합니다. 원하는 만큼의 스캐너를 설정한 뒤, 개별 Jenkins job에서 원하는 런처를 선택해 SonarQube 분석을 수행할 수 있습니다.

    1. Jenkins에 administrator 계정으로 로그인 한 뒤, Manage Jenkins > Global Tool Configuration 페이지로 이동합니다.

    2. Add SonarQube Scanner for MSBuild

  • Add an installation of the latest available version. Check Install automatically to have the SonarQube Scanner for MSBuild automatically provisioned on your Jenkins executors

    If you do not see any available version under Install from GitHub, first go to Manage Jenkins > Manage Plugins > Advanced and click on Check now

  • Job Configuration

  • Configure the project, and scroll down to the Build section.
  • Add both the 
    1. 를 클릭합니다.

    2. 사용 가능한 설치 버전을 추가삽니다. Install automatically에 체크하면 Jenkins executor가 SonarQube Scanner for MSBuild의 해당 버전을 다운로드 합니다. Install from GitHub에서 사용가능한 버전을 확인할 수 없는 경우, Manage Jenkins > Manage Plugins > Advanced로 이동해 Check now를 먼저 클릭하십시오.

    Job Configuration

    1. Job > Configure > Build 섹션으로 이동합니다.
    2. 빌드 스텝에 SonarQube for MSBuild - Begin Analysis
     and 
    1. SonarQube for MSBuild - End Analysis
     build steps to your build Configure the SonarQube Project KeyName and Version in the 
    1. 를 추가합니다.
    2. SonarQube Scanner for MSBuild - Begin Analysis
     build stepUse the MSBuild build step or the Execute Windows batch command to execute the build with MSBuild 14 (see compatibility) between the Begin Analysis and End Analysis steps
    1. 스텝에서 SonarQube Project Key, NameVersion 정보를 입력합니다.
    2. Begin AnalysisEnd Analysis 사이에서 MSBuild 스텝 혹은 MSBuild 14(호환성 참조)의 경우 Execute Windows batch command 스텝을 사용해 분석을 수행할 수 있습니다.
      Image Modified

     

    Analyzing with

    SonarQube Scanner for

    Maven

    Maven으로 분석하기

    Global Configuration

    Log into Jenkins as an administrator and go to 
    1. Jenkins에 administrator 계정으로 로그인 한 뒤, Manage Jenkins > Configure System
    Scroll to the 
    1. 페이지로 이동합니다.
    2. SonarQube servers
     section and check 
    1. 섹션에서 Enable injection of
    SonarQube
    1. SonarQue server configuration as build environment variables항목에 체크합니다

    Job Configuration

  • Configure the project, and scroll down to the Build Environment section.
  • Enable 

    Once the environment variables are available, use them in a standard Maven build step by setting the Goals to include

    1. Job > Configure > Build Environment 섹션으로 이동합니다.
    2. Prepare SonarQube Scanner environment

     to allow the injection of SonarQube server values into this particular job. If multiple SonarQube instances are configured, you will be able to choose which one to use.

    Press the help button to learn which variables you can use in your build. Some values may be blank, depending on what was defined for the server.

    Image Removed

     

     

     

    1.  옵션을 활성화해서 SonarQube 서버의 환경 변수를 해당 Job에서 활용할 수 있도록 합니다. 복수의 SonarQube 인스턴스를 사용하는 경우, 사용할 인스턴스를 직접 지정할 수 있습니다.

      Tip

      사용 가능한 환경변수를 확인하려면 help 버튼을 클릭합니다. SonarQube 서버 설정에 따라 일부 환경 변수는 빈 값을 가지고 있을 수 있습니다.

       

    2. 환경 변수를 사용할 수 있다면 아래와 같이 Maven goal 설정 인자로 활용할 수 있습니다:

      Code Block
      $SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL
     

    Note
    The

    Post-build Action for Maven analysis

    is still available, but is deprecated.

    Analyzing in a Jenkins pipeline

    Since version 2.5 of the SonarQube Scanner for Jenkins, there is an official support of Jenkins pipeline. We provide a 'withSonarQubeEnv' block that allow to select the SonarQube server you want to interact with. Connection details you have configured in Jenkins global configuration will be automatically passed to the scanner.

    Support of pipeline only works with SonarQube >= 5.2.

    Here are a some examples for every scanner, assuming you run on Unix slaves and you have configured a server named 'My SonarQube Server' as well as required tools. If you run on Windows slaves, just replace 'sh' by 'bat'.

    SonarQube Scanner

    node {
      

    스텝을 사용할 수 있으나, 해당 기능은 더이상 유지보수되지 않습니다.

    Jenkins pipeline에서 분석하기

    SonarQjube Scanner for Jenkins 플러그인 v2.5부터 공식적으로 Jenkins Pipeline을 지원합니다. 'withSonarQubeEnv' 블록을 사용해 연동할 SonarQube 서버를 선택할 수 있습니다. Jenkins global configuration에 저장된 연결 설정 정보를 자동으로 scanner에 전달합니다.

    Note

    Pipeline을 사용하기 위해서는 SonarQube v5.2 이상을 사용해야 합니다,

    아래 샘플은 Unix 슬레이브를 사용하고, SonarQube  서버의 이름을 'My SonarQube Server'라고 설정한 경우의 예입니다. Windows 시스템을 사용하는 경우 'sh'를 '.bat' 으로 변경합니다:

    Code Block
    languagebash
    titleSonarQube Scanner
    node {
      stage('SCM')
    {    git 
     {
        git 'https://github.com/foo/bar.git'
      }
      
    
      }
      stage('SonarQube analysis')
    {    
     {
        // requires SonarQube Scanner 2.8+
        def scannerHome = tool 'SonarQube Scanner
    
        def scannerHome = tool 'SonarQube Scanner 2.8';
        
    
        withSonarQubeEnv('My SonarQube Server')
    {      sh 
     {
          sh "${scannerHome}/bin/sonar-scanner"
        }
      }
    }
    
        }
      }
    }


    Code Block
    languagebash
    titleSonarQube Scanner for Gradle
    node {
      
    
      stage('SCM')
    {    git 
     {
        git 'https://github.com/foo/bar.git'
      }
      
    
      }
      stage('SonarQube analysis')
    {    
     {
        withSonarQubeEnv('My SonarQube Server')
    {      
     {
          // requires SonarQube Scanner for Gradle 2.1+
          
    
          // It's important to add --info because of SONARJNKNS-281
          sh 
    
          sh './gradlew --info sonarqube'
        }
      }
    }
    
        }
      }
    }


    Code Block
    languagebash
    titleSonarQube Scanner for Maven
    node {
      
    
      stage('SCM')
    {    git 
     {
        git 'https://github.com/foo/bar.git'
      }
      
    
      }
      stage('SonarQube analysis')
    {    
     {
        withSonarQubeEnv('My SonarQube Server')
    {      
     {
          // requires SonarQube Scanner for Maven 3.2+
          sh 
    
          sh 'mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar'
        }
      }
    }
    
        }
      }
    }


    Code Block
    languagebash
    titleSonarQube Scanner for MSBuild
    node {
      
    
      stage('SCM')
    {    git 
     {
        git 'https://github.com/foo/bar.git'
      }
      
    
      }
      stage('Build + SonarQube analysis')
    {    def sqScannerMsBuildHome = tool 'Scanner for MSBuild
     {
        def sqScannerMsBuildHome = tool 'Scanner for MSBuild 2.2'
        
    
        withSonarQubeEnv('My SonarQube Server')
    {      
     {
          // Due to SONARMSBRU-307 value of sonar.host.url and credentials should be passed on command
    line      bat 
     line
          bat "${sqScannerMsBuildHome}\\SonarQube.Scanner.MSBuild.exe begin /k:myKey /n:myName /v:1.0 /d:sonar.host.url=%SONAR_HOST_URL% /d:sonar.login=%SONAR_AUTH_TOKEN%"
          bat 
    
          bat 'MSBuild.exe /t:Rebuild'
          bat 
    
          bat "${sqScannerMsBuildHome}\\SonarQube.Scanner.MSBuild.exe end"
        }
      }
    }

    Pause pipeline until quality gate is computed

    The waitForQualityGate step will pause the pipeline until SonarQube analysis is completed and returns quality gate status.

    Pre-requisites:

  • SonarQube server 6.2+ (need webhook feature)
  • Configure a webhook in your SonarQube server pointing to 
    
        }
      }
    }

    품질 게이트 계산이 완료될 때까지 파이프라인 중단하기

    waitForQualityGate 단게를 사용해 SaonrQube 서버가 분석을 완료하고 품질 게이트 상태를 반환할 때까지 파이프라인을 중단할 수 있습니다.

    사전 준비 사항:

    • SonarQube v6.2 이상 설치 (webhook 기능 필요)
    • SonarQube 서버가 <your Jenkins instance>/sonarqube-webhook/
     (info) The trailing slash is mandatory with SonarQube 6.2 and 6.3!
  • Use withSonarQubeEnv step in your pipeline (so that SonarQube taskId is correctly attached to the pipeline context).

  • Example:

    SonarQube Scanner for MSBuild

    node {
      
    • 을 가리키도록 webhook을 설정합니다. SonarQube v6.2 및 v6.3을 사용하는 경우에는 가장 마지막의 슬래시('/')를 반드시 입력해야 합니다.
    • 파이프라인에서 withSonarQubeEnv 스텝 설정(SionarQube taskId가 파이프라인 컨텍스트에 정상적으로 표시되어야 함)

    예:

    Code Block
    languagebash
    titleSonarQube Scanner for MSB
    node {
      stage('SCM')
    {    git 
     {
        git 'https://github.com/foo/bar.git'
      }
      
    
      }
      stage('SonarQube analysis')
    {    
     {
        withSonarQubeEnv('My SonarQube Server')
    {      sh 
     {
          sh 'mvn clean package sonar:sonar'
        } 
    
        } // SonarQube taskId is automatically attached to the pipeline context
      }
    }
      
    // No need to occupy a node
    
      }
    }
      
    // No need to occupy a node
    stage("Quality Gate"){
      
    
      timeout(time:
     
     1, unit:
     
     'HOURS') {
     
     // Just in case something goes wrong, pipeline will be killed after a
    timeout    def qg =
     timeout
        def qg = waitForQualityGate()
     
     // Reuse taskId previously collected by
    withSonarQubeEnv    if 
     withSonarQubeEnv
        if (qg.status !=
     
     'OK')
    {      error 
     {
          error "Pipeline aborted due to quality gate failure: ${qg.status}"
        }
      }
    }
    Thanks to the webhook, the step is implemented in a very lightweight way: no need to occupy a node, and it doesn't prevent Jenkins to restart (step will be restored after restart
    
        }
      }
    }

    webhook을 사용해 이 단계를 매우 간단하게 설정할 수 있습니다. 별도로 node를 지정하거나, Jenkins를 재시작하지 않아도 됩니다(재시작 후에 스텝이 복원됩니다).