基于sonar 的C#静态代码扫描使用总结

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登录数据库,执行以下命令:

  1. 创建sonar数据库
  2. 创建sonar 用户
  3. 给sonar 赋予权限
  4. 密码是sonar
  5. 刷新权限
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机器的工作路径命名空间
标签:随便设置个名称,注意 后边选择机器时填写哪个标签就用哪台机器

设置完成后点击上线节点
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个双鱼座的测开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值