DevOps(6)--SonarQube代码扫描
代码扫描
1. 安装SonarQube扫描器
地址:https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner/
这里我们下载windows版本
这个需要确保你有jdk环境。
2. 扫描go代码
接下来找一个go项目进行扫描。
# must be unique in a given SonarQube instance
sonar.projectKey=msgo
# --- optional properties ---
# defaults to project key
#sonar.projectName=My project
# defaults to 'not provided'
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=123456
sonar.host.url=http://192.168.200.101:31124
sonar.exclusions=**/*_test.go
sonar.tests=.
sonar.test.inclusions=**/*_test.go
sonar.language=go
执行扫描
在要扫描的项目根目录下运行:
E:\develop\sonar-scanner-4.8.0.2856-windows\bin\sonar-scanner.bat -Dproject.settings=./sonar.properties
3. 插件方式
地址:https://www.sonarsource.com/products/sonarlint/
目前还没有对goland做支持。
以idea为例
4. Jenkins集成
前面的学习中,我们学习了Jenkins,我们接下来要做的就是将sonar集成到jenkins中,让其自动扫描代码。
安装扫描插件,同时安装http request插件和 Pipeline Utility StepsVersion插件
在sonar中生成token
在jenkins中设置凭据
转到"管理Jenkins>系统配置",向下滚动到SonarQube配置部分,单击Add SonarQube,添加服务器,选择凭据
4.1 新建任务
4.2 配置scanner
def HttpReq(reqType,reqUrl,reqBody){
sonarServer = "http://sonarqube.sonar.svc.cluster.local:9000/api"
// 可以不加authentication认证,因为默认不需要
result = httpRequest authentication: '322b1713-09d8-4d60-b438-feac0777d55e',
httpMode: reqType,
contentType: "APPLICATION_JSON",
consoleLogResponseBody: true,
ignoreSslErrors: true,
requestBody: reqBody,
url: "${sonarServer}/${reqUrl}"
//quiet: true
return result
}
//获取Sonar质量阈状态
def GetProjectStatus(projectName){
apiUrl = "project_branches/list?project=${projectName}"
response = HttpReq("GET",apiUrl,'')
response = readJSON text: """${response.content}"""
result = response["branches"][0]["status"]["qualityGateStatus"]
println(response)
return result
}
pipeline{
agent {
label 'ms-jenkins'
}
environment {
mvnPATH = "/var/jenkins_home/mvn/bin"
projectName = "${env.JOB_NAME}"
branchName = "master"
}
stages {
stage('SonarQube analysis'){
steps{
script{
sonarDate = sh returnStdout: true, script: 'date +%Y%m%d%H%M%S'
sonarDate = sonarDate - "\n"
scannerHome = tool 'sonarqube'
}
withSonarQubeEnv('sonarqube') {
sh "pwd;ls ./ ;${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=testgo -Dsonar.sources=. -Dsonar.exclusions=**/*_test.go -Dsonar.login=squ_0f3342fb7392e7165864235913b4c10de1eb4fb3"
}
script{
result = GetProjectStatus("${projectName}")
if ("${result}" == "OK"){
println("代码检测通过 ")
}else{
error "代码检测不通过"
}
// println("${result}")
}
}
}
}
}
DevOps(6)--SonarQube代码扫描
http://47.123.5.226:8090//archives/devops-6---sonarqubedai-ma-sao-miao