引导 您好,本章主要我们主要学习与质量管理平台Sonarqube集成。主要包含以下内容:1. 项目分析 2. 自动化分析 适合人群: 所有对DevOps感兴趣的同学。
1. 项目分析
安装配置sonarscanner
下载地址:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
tar zxf sonar-scanner-xxxx.tar.gz -C /usr/local
vim /etc/profile
export SCANNER_HOME=/usr/local/sonar-scannerxxx
export PATH=$PATH:$SCANNER_HOME/bin
source /etc/profile
扫描分析
sonar.projectKey
指定项目的关键字,sonar.host.url
指定服务器地址(可以直接在配置文件中写死),projectName
指定项目的名称, projectVersion
指定项目的版本(可以用构建时间和构建ID定义),login
指定登录用户名,password
指定登录用户密码, projectDescription
指定项目的描述信息, links.homepage
指定项目的主页(超链接), sources
指定扫描的目录, sourceEncoding
指定扫描时的编码, java.binaries
指定编译后的类文件目录(必填), java.test.binaries
指定编译后的测试类目录,java.surefire.report
指定测试报告目录。
sonar-scanner -Dsonar.host.url=http://192.168.1.200:9000 \
-Dsonar.projectKey=demo-maven-service \
-Dsonar.projectName=demo-maven-service \
-Dsonar.projectVersion=1.0 \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.ws.timeout=30 \
-Dsonar.projectDescription="my first project!" \
-Dsonar.links.homepage=http://www.baidu.com \
-Dsonar.sources=src \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes \
-Dsonar.java.surefire.report=target/surefire-reports
2. 自动化分析
在jenkins中安装插件sonarqube scanner
配置SonarQube服务器:登录Jenkins,然后转到“ 管理Jenkins”>“配置系统”。向下滚动到SonarQube配置部分,单击Add SonarQube,然后添加提示您的值。服务器身份验证令牌应创建为“机密文本”凭据。
首先我们在共享库中定义一个sonarqube.groovy,用与扫描。新建文件src/org/devops/sonarqube.groovy
在这里我们定义了一个服务器列表,用于选择本次扫描使用的服务器(存在多个sonar的时候很有用处) 使用withSonarQubeEnv
使用在Jenkins中配置sonar环境。这个方法有5个参数服务器类型、项目名称、项目描述、项目扫描路径、分支名称
。
package org.devops
//scan
def SonarScan(sonarServer,projectName,projectDesc,projectPath,branchName){
//定义sonar服务器列表
def servers = ["test":"sonarqube-test","prod":"sonarqube-prod"]
//使用sonar服务器
withSonarQubeEnv("${servers[sonarServer]}"){
def scannerHome = "/home/jenkins/buildtools/sonar-scanner-3.2.0.1227-linux/"
def sonarDate = sh returnStdout: true, script: 'date +%Y%m%d%H%M%S'
sonarDate = sonarDate - "\n"
sh """
${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=${projectName} \
-Dsonar.projectName=${projectName} -Dsonar.projectVersion=${sonarDate} -Dsonar.ws.timeout=30 \
-Dsonar.projectDescription=${projectDesc} -Dsonar.links.homepage=http://www.baidu.com \
-Dsonar.sources=${projectPath} -Dsonar.sourceEncoding=UTF-8 -Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes -Dsonar.java.surefire.report=target/surefire-reports -Dsonar.branch.name=${branchName} -X
"""
}
}
在Jenkinsfile中引用: 我们首先加载jenkinslibrary
共享库,引用sonarqube.groovy
。
@Library('jenkinslibrary@master') _
//func from shareibrary
def sonar = new org.devops.sonarqube()
pipeline {
agent any
stages {
stage("codescan"){
steps{
script{
sonar.SonarScan("test","${JOB_NAME}","${JOB_NAME}","src")
}
}
}
}
}
效果:此时流水线运行完成后,在项目中可以看到Sonarqube的链接。点击即可进入sonarqube
项目的扫描结果