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

news2024/12/22 5:18:06

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机器的工作路径命名空间
标签:随便设置个名称,注意 后边选择机器时填写哪个标签就用哪台机器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/971081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WorldCoin 运营数据,业务安全分析

WorldCoin 运营数据,业务安全分析 Worldcoin 的白皮书中声明,Worldcoin 旨在构建一个连接全球人类的新型数字经济系统,由 OpenAI 创始人 Sam Altman 于 2020 年发起。通过区块链技术在 Web3 世界中实现更加公平、开放和包容的经济体系&#…

PHP 影院售票管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页代码

一、源码特点 PHP 影院售票管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 https://download.csdn.net/download/qq_41221322/88297676 PHP 影院售票管理系统Dr…

OpenCV(十九):模板匹配

1.模板匹配: OpenCV提供了一个模板匹配函数,用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask noArray() ); image…

小程序上传文件

wx.chooseImage({success (res) {const tempFilePaths res.tempFilePathswx.uploadFile({url: https://example.weixin.qq.com/upload, //仅为示例,非真实的接口地址filePath: tempFilePaths[0],name: file,formData: {user: test},success (res){const data res.…

GEE:空气污染指数 (API)计算

作者:CSDN @ _养乐多_ 本文记录了基于以下公式计算的空气污染指数代码: API = 0:7(NO2)+ 0:15(SO2)+ 0:1(O3)+ 0:05(CO) 计算空气污染指数 (API)。 文章目录 一、完整代码二、完整连接一、完整代码 var roi = table;var dataset_NO2 = ee.ImageCollection(

Python读取xls文件

Python读取xls文件 1、这里面有个问题在读取xlsx的时候有点问题,汇报异常,要把文件名字改成xls import xlrd import os def getdata():file_path os.path.dirname(os.path.abspath(__file__))base_path os.path.join(file_path, 1.xls)book xlrd.op…

Yolov5改进算法之添加Res2Net模块

目录 1. Res2Net介绍 1.1 Res2Net的背景和动机 1.2 Res2Net的基本概念 2. YOLOV5添加Res2Net模块 Res2Net(Residual Resolution Network)是一种用于图像处理和计算机视觉任务的深度卷积神经网络架构。它旨在解决传统的ResNet(Residual Ne…

在职博士|中国社科院-英国斯特灵创新与领导力管理博士之中方课程《变革领导力》

在职博士|中国社科院-英国斯特灵创新与领导力管理博士之中方课程《变革领导力》 在职博士|中国社科院-英国斯特灵创新与领导力管理博士之中方课程《变革领导力》 本次课程的主讲老师是现任中国社会科学院人口与劳动经济研究所研究员、人力资源研究室主任,中国社会科…

虹科产线实时数采检测方案——高速采集助力智能化升级

01 产线数采检测相关技术背景 1.1 典型场景 对于产线数采检测,让我们从典型的工厂场景开始介绍。 每个工位都有上位机监控下方的PLC控制器。指令、执行单元和作用对象的状态通过内置传感器进行采集和测量,反馈给PLC实现闭环控制。 工业4.0和智能制…

快速学会git版本管理——上传gitee仓库

首先在gitee右上角有一个新建仓库 创建之后打开自己想要上传的文件 右键打开 Git Bash Here 接下来会弹出git的窗口 首先先初始化仓库 用git命令 git init 然后用git add . 上传所有文件上传到暂存区(上一篇文章说过add是单个文件,add . 是所有文件) 没有显示错误 …

内存泄漏分析

一、什么是内存泄漏? 内存泄漏是指在程序运行过程中,分配给程序的内存空间在不需要时没有被正确释放或回收的情况。 二、Java层内存泄漏。 Android应用程序中Java层常见的内存泄漏情况: Context引用泄漏:Android中的Context是…

【Flutter】Flutter 使用 flutter_rating_bar 实现评分条指示器

【Flutter】Flutter 使用 flutter_rating_bar 实现评分条指示器 文章目录 一、前言二、简介三、安装和基本使用四、实际业务中的用法五、完整示例六、总结 一、前言 大家好,我是小雨青年,很高兴与大家分享 Flutter 中的一个非常实用的组件:f…

马斯克谈 Facebook 不开源算法

导读虽然马斯克与扎克伯格的 “八角笼中” 之约没有达成,但很显然,马斯克并不打算就此罢休。既然没能在线下大战一场,那自然不会错过在线上 “出招” 的机会。 他转发了一则推文,并说道:“在地球上,Facebo…

STM32调试时卡在B 0x20000000

分析原因,发现sw下,硬件接reset管脚,所以需要设置debug reset 选择 hw reset

Excel中将文本格式的数值转换为数字

在使用excel时,有时需要对数字列进行各种计算,比如求平均值,我们都知道应该使用AVERAGE()函数,但是很多时候结果却“不尽如人意”。 1 问题: 使用AVERAGE函数: 结果: 可以看到单元格左上角有个…

2023年9月重庆/上海/深圳NPDP产品经理国际认证火热招生

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

锐捷BGP【基础二】--尚文网络敏姐

BGP协议 这节主要学习IBGP和IGP之间的区别与联系, BGP 路由信息交互,了解BGP的安全性,BGP协议的基本配置,如何建立IBGP、EBGP对等体,引入与传递路由。 目录 BGP协议 BGP基础概念 IBGP和IGP的不同 BGP 路由信息交…

优化 | 带有未知评估成本和预算约束的多步贝叶斯优化

论文解读者:胡明杰 编者按: 贝叶斯优化是一种处理黑盒函数优化的常用方法. 大多数的贝叶斯优化方法假设评估成本是同质的. 然而, 在实际问题中,评估成本往往是异质且未知的. 此外,现有的考虑异质评估成本的方法并不能很好地处理…

Ansible之变量

一)Ansible变量介绍 我们在PlayBook⼀节中,将PlayBook类⽐成了Linux中的shell。 那么它作为⼀⻔Ansible特殊的语⾔,肯定要涉及到变量定义、控 制结构的使⽤等特性。 在这⼀节中主要讨论变量的定义和使⽤ 二)变量命名规则 变量的…

软件设计师(二)程序设计语言基础知识

程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。 一、程序设计语言概述 1、基本概念 (1)低级语言和高级语言 计算机硬件只能识别由 0、1 组成的机器指令序列,即机器指令程序&…