1. sonarQube
大多数jenkins的流水线都有一个“分析”的阶段,用于处理收集代码的指标、确定复杂度,识别不良编码和可能的漏洞以及计算潜在的资源成本(技术债务)。这些分析可以识别潜在的问题,修复这些问题。可以增强代码的可读性,可靠性和可维护性。
而在jenkins的分析阶段,用的往往是目前最流行的’分析’应用之一 sonarQube。
sonarQube(以前被称为sonar)是一个用于管理一些关键软件领域的代码质量,包括
- 架构设计
- 注释
- 编码规则
- 潜在错误
- 重复代码
- 单元测试
- 复杂度
的一个开源项目。
具体的使用指南,请查看sonarQube使用指南
2. jenkins安装SonarQube Scanner插件
登陆jenkins页面
–>系统管理
–>插件管理
安装插件SonarQube Scanner
这个插件的主要作用是提供一个与sonarQube服务器连接的桥梁。安装完此插件之后,需要配置sonarQube的地址。
安装完成,重启之后。
登陆jenkins页面
–>系统管理
–>系统配置
- 找到SonarQube servers,配置你的sonarQube服务器地址。
-
添加token:(怎么添加看下一步)
选择 Secret text。将生成的token填写至Secret中。ID可以自己随便填写或者不写
- (这个是sonarQube管理员页面)使用sonarQube管理员生成token
至此,jenkins算是与sonarQube建立了连接。
3. sonarQube扫描器
sonarQube扫描代码,需要一个插件工具既是sonarQube扫描插件工具。这个工具的安装方式有很多种,
-
通过自动化构建工具安装
不管是maven项目,还是gradle项目都提供了安装sonarQube扫描工具的插件。
这种方式就是将插件安装在具体的项目中
比如:Gradle项目,需要在你项目中的build.gradle文件中,引入
plugins { id "org.sonarqube" version "2.7" }
-
通过jenkins安装
在jenkins中安装扫描器工具。这样一来,就可以扫描所有的项目。不需要为项目单独安装。
安装方式:
登陆jenkins页面
–>系统管理
–>全局工具配置
找到SonarQube Scanner ,
如果可以上网,网速还可以,可以进行自动安装。该扫描工具插件下载源是maven中央仓库
如果网速一般或者要求离线安装。需要自己下载相应版本的工具,填写安装路径。
然后解压放到jenkins的插件目录下(这个目录随意,保持路径一致,jenkins能找到就行)
/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/myScanner
修改配置文件:添加对应路径
hudson.plugins.sonar.SonarRunnerInstallation.xml
<?xml version='1.1' encoding='UTF-8'?>
<hudson.plugins.sonar.SonarRunnerInstallation_-DescriptorImpl plugin="sonar@2.11">
<installations>
<hudson.plugins.sonar.SonarRunnerInstallation>
<name>myScanner</name> <home>/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/myScanner</home>
</hudson.plugins.sonar.SonarRunnerInstallation>
</hudson.plugins.sonar.SonarRunnerInstallation_-DescriptorImpl>
jenkins这些配置都是热读取,不用重启。
注意解压后插件扫描工具,执行文件的文件权限问题
[root@node1 bin]# ll 总用量 16 -rwxr-xr-x 1 root root 1762 2月 20 08:14 sonar-scanner -rwxr-xr-x 1 root root 2420 2月 20 08:14 sonar-scanner.bat -rwxr-xr-x 1 root root 595 2月 20 08:14 sonar-scanner-debug -rwxr-xr-x 1 root root 544 2月 20 08:14 sonar-scanner-debug.bat
页面配置对应地址就可以了
4. 代码质量扫描
这里构建一个普通的流水线脚本
pipeline {
agent any
stages {
stage('获取源码') {
steps {
script {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'http://git.com.cn/test.git']]])
}
}
}
stage('代码质量检测') {
steps {
script {
def scannerHome = tool 'myScanner';//这个名字一定是对应全局工具配置中sonar扫描器的名字
withSonarQubeEnv(credentialsId: '8e08dedd-70ec-485a-a33e-e06ca100c010') {
sh "${scannerHome}/bin/sonar-scanner
-Dsonar.projectKey=XXXServer
-Dsonar.projectName=XXXServer
-Dsonar.projectVersion=2.0.0
-Dsonar.language=java
-Dsonar.sourceEncoding=utf8
-Dsonar.sources=.
-Dsonar.java.binaries=."//这里将sonarQube的属性定义在这里,可以定义在项目文件中,在这里引用配置文件
}
}
}
}
}
}