1.原理简介
C#语言接入Sonar代码静态扫描相较于Java、Python来说,相对麻烦一些。Sonar检测C#代码时需要预先编译,而且C#代码必须用MSbuid进行编译,如果需要使用SonarQube对C#进行代码质量分析,则需要Sonar-Scanner-MSBuild和MSBuild,其中要求MSBuild在V14.0以上。
1.1 java8需要的安装包
链接:https://pan.baidu.com/s/1lp85mfmX_0W7t6MyWgn0JQ?pwd=abcd
提取码:abcd
Sonarqube-7.8是sonar的部署包;
sonar-scanner-msbuild是代码扫描的包;
还需要msbuild,这个是需要安装Microsoft Visual Studio 会自动安装 没有需要自行安装;
sonar-|10n-zh-plugin-1.28.jar为汉化包。
2.sonar安装
2.1基于windows安装sonarqube
环境参数
software
version
JDK
1.8
SonarQube
SonarQube-7.8
sonar-runner
sonar-runner-dist-2.4
汉化插件
sonar-|10n-zh-plugin-1.28.jar
mysql
mysql-5.7 有版本限制 5.7 最新8.0以上版本不支持
一、数据库配置
root登录数据库,执行以下命令:
- 创建sonar数据库
- 创建sonar 用户
- 给sonar 赋予权限
- 密码是sonar
- 刷新权限
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
打开sonar/conf目录下的sonar.properties,加入以下配置项:
#数据库连接url
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#数据库用户
sonar.jdbc.username=sonar
#数据库密码
sonar.jdbc.password=sonar
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
url是数据库连接地址,username是数据库用户名,jdbc.password是数据库密码,login是sonarqube的登录名,sonar.password是sonarqube的密码
sonar默认的登陆名和密码都是admin,默认端口是http://localhost:9000/
二、启动sonarqube
直接打开bin\windows-x86-64\StartSonar.bat 即可运行;如需汉化提前将汉化包放入到
\sonarqube-7.8\sonarqube-7.8\extensions\plugins 下
注:汉化包下载地址:https://github.com/xuhuisheng/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.28
表示执行安装成功。本地连接 访问地址:http://localhost:9000/未修改文件情况下初始账户密码为 admin admin
3.windows本地C#代码扫描插件环境安装
3.1安装 sonar-scanner-msbuild
下载对应版本的sonar scanner插件 并解压
将解压后路径配置到环境变量 path中 D:\soft\sonar-scanner-msbuild-4.3.1.1372-net46
3.2 msbuild C#编译环境配置
msbuild在安装vs后会自动安装,路径为
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
将此路径配置到环境变量。
4.本地执行扫描操作
msbuild常用编译命令:
MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug;/p:Platform=x86;TargetFrameworkVersion=v3.5
编译为 Release 代码 -p:configuration=“release”
清理项目 -t:clean
重新编译 -t:rebuild
编译项目 -t:build 默认可以忽略这个参数
发布 -t:Publish
注意:这里的 -t 和 /t 作用是相同的。
4.1 配置sonar项目,创建token (注意token只展示一次,记着赋值备份)
以上步骤完成生成三个对应阶段命令,直接赋值依次执行即为 4.2 、4.3、 4.4的步骤。
4.2 开启scanner-for-msbuild begin
注意执行scanner-for-msbuild begin 命令前先将路径切换到C#路径
4.3 开始编译C#代码
执行 MsBuild.exe /t:Rebuild 命令 编译代码
4.4 扫描结束上传报告
执行
SonarScanner.MSBuild.exe end /d:sonar.login="xxxxxxxxxxxx"
上传报告
上传中。。
上传成功图
4.5 报告分析
以上步骤执行成功后,报告上传到本地sonar成功,查看项目展示缩略信息
进入项目展示详细信息
5.如何导出报告
下载sonar-pdf-plugin插件
下载地址:https://gitee.com/zzulj/sonar-pdf-plugin/releases
暂时无法在飞书文档外展示此内容
把下载好的插件放到Sonarqube安装目录的extensions/plugins目录下,重启Sonarqube服务即可。
pdf生成配置 :
重新执行代码扫描后会生成pdf文件 ,下载pdf文件位置
6.VS ide 使用SonarLint
待完善。
7.通过jenkins集成 sonar 做静态代码扫描注意事项及方式
一、插件方式
1.Jenkins安装插件及插件配置
下载插件sonarqube scanner,用来集成sonarqube,在配置任务的时候才有sonarscanner的选项。
全局工具配置windows本地的msbuild和sonarscanner for msbuild
2.系统配置sonar server
3任务配置
限制运行节点为windows的几点,关于windows机器怎么设置为代理节点 在8.2章节介绍
二、pipline脚本方式
pipeline {
agent {
label 'windowssonar'
}
parameters {
string(name: 'BRANCHNAME', defaultValue: 'develop', description: '代码分支名称')
}
environment {
JENKINS_NODE_COOKIE = 'dontKillMe'
}
stages {
stage("任务参数检测") {
steps {
println "JobName: " + env.JOB_NAME
println "BuildNumber: " + env.BUILD_NUMBER
println "BranchName: " + "${BRANCHNAME}"
script {
echo "任务参数检测"
}
}
}
stage("清理测试环境") {
steps {
script {
echo "删除之前代码库代码"
}
}
}
stage("下载平台代码") {
steps {
script {
echo "开始克隆代码"
}
}
}
stage("开启扫描") {
steps {
script {
dir('D:\\cproject\\miautomationv1.0\\code\\LineControlSln'){
echo "begin"
cmd_begin='SonarScanner.MSBuild.exe begin /k:"miautomationv1.0-01" /d:sonar.host.url="http://10.221.129.75:9000" /d:sonar.login="768ea2749c6151843e6dc113cf86ae2c2ba48fca"'
echo cmd_begin
bat "cd D:\\cproject\\miautomationv1.0\\code\\LineControlSln"
bat "cd"
bat "${cmd_begin}"
echo "编译"
bat "MsBuild.exe /t:Rebuild"
echo "end"
bat 'SonarScanner.MSBuild.exe end /d:sonar.login="768ea2749c6151843e6dc113cf86ae2c2ba48fca"'
}
}
}
}
}
}
8.引申 jenkins代理节点配置方式
代理节点机器大概分为linux、windows两种,linux机器必须是静态密码方式验证所以linux机器必须是运行静态密码登录的机器;windows机器则不需要,以下是两种代理节点的配置方式。
8.1linux
一、配置凭据
Manage Jenkins → Manage Credentials→Jenkins
点击“全局凭据”
添加凭证
输入对应服务器的用户名和密码,设置对应的id,用于识别
二、配置节点
Manage Jenkins →Manage Nodes and Clouds→新建节点
填写linux节点名称,勾选Permanent Agent,点击Create
填写对应的远程工作目录
/var/jenkins/workspace
填写标签,用于构建时,根据标签选择节点构建
根据截图,选择对应的选项,填写服务器的ip,以及选择刚才配置的凭证,点击高级
查询远程服务器的java路径,在对应linux服务器输入命令:
echo $JAVA_HOME
输入对应的端口和完整的java路径,注意:不止是JAVA_HOME,需要具体到对应的java上
/usr/local/jdk-16.0.1/bin/java
点击“保存”,成功
详细教程http://www.inspinia.net/a/16029.html?action=onClick
8.2windows
配置节点信息
节点页面新建节点
输入节点名称
设置节点远程工作路径和标签名等信息
远程工作目录: windows机器的工作路径命名空间
标签:随便设置个名称,注意 后边选择机器时填写哪个标签就用哪台机器
设置完成后点击上线节点