SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
【前言】
本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目。目录如下:
- SonarQube系列一、Linux安装与部署
- SonarQube系列二、分析dotnet core/C#代码
- SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
【实现功能】
这篇文章将要介绍的主要内容如下:
- 将上一篇文章中的sonarqube命令整合为shell脚本
- 将 shell 脚本集成到jenkins中
【整合sonarqube命令为shell脚本】
因为使用的是 linux 服务器,因此,我们将上一篇文章中关于 sonarqube 的相关命令整合到 shell 脚本中,以便方便地调用,并且很容易集成到CI/CD工具中。
shell 脚本另一个优势就是不需要在 jenkins 上安装过多的插件,而改用脚本调用,保持jenkins的单一整洁,在机器迁移的情况下会异常方便快捷。
1.整合 dotnet test 命令
首先将 dotnet test 命令整合成一个脚本,脚本如下:
#是否执行当前脚本
execute=$
#test项目全路径
testDir=$ if [ ${execute} == false ];then
echo "7tiny: There is nothing to execute!"
exit
fi echo "7tiny:begin test..." #使用这个方法需要在test项目里安装nuget包:dotnet add package coverlet.msbuild
dotnet test ${testDir} --logger:"trx;LogFileName=test.trx" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/' if [ $? != ];then
exit
fi echo "7tiny:test finished!" exit
参数:
- execute:是否执行脚本(便于和jenkins的checkbox结合,如不需要传true即可)
- testDir:test项目 xxxtexst.csproj 文件完整目录地址
2.整合 dotnet sonarscanner 命令
#是否执行当前脚本
execute=$
#要构建的解决方案名称
solutionName=$
#.sln文件全路径
solutionDir=$ if [ ${execute} == false ];then
echo "7tiny: There is nothing to execute!"
exit
fi echo "7tiny:begin scanner..." export PATH=${PATH}:${HOME}/.dotnet/tools dotnet sonarscanner begin /k:${solutionName} /n:${solutionName} /v:${BUILD_NUMBER} if [ $? != ];then
exit
fi dotnet build ${solutionDir} if [ $? != ];then
exit
fi dotnet sonarscanner end if [ $? != ];then
exit
fi echo "7tiny:scanner finished!" exit
参数:
- execute:是否执行脚本(便于和jenkins的checkbox结合,如不需要传true即可)
- solutionName:要构建的解决方案名称
- solutionDir:.sln文件全路径
脚本里面默认将解决方案的名称当作 sonarqube 中的项目名称;将 jenkins 编译的版本号当作 sonarqube 的活动编号;
3.将shell脚本到服务器 jenkins 可以访问的目录
我们将上述两个 shell 脚本存为 xxx.shell 并存放到服务器上,以便使用 jenkins 调用执行,比如我这里将两个文件存到了服务器某位置:
【将shell脚本整合到jenkins中】
有了shell 脚本,那么 jenkins 的整合便非常容易了,我们只需要在 jenkins 的 shell 命令框调用写好的 shell 脚本, 并将参数传递进去即可。
例如:
打开 jenkins 中的的某个项目的项目配置:
然后在最下面的 Build 区域 Execute Shell 框内填写相应的 shell 命令,当然是调用我们的 shell 脚本:
依次调用了:
- 编译打包发布nuget
- 执行test
- 执行sonar canner
每个脚本的第一个参数都是是否执行,以便于我们配置 checkbox 决定是否执行某个脚本,其他参数按顺序传入即可。
checkbox 的配置方式:
我这里选择 boolean 参数的配置,然后我们在 build 的时候就可以自行决定是否选择。
【Jenkins编译执行代码分析】
我们本次不进行nuget打包,只进行代码分析,因此选择代码分析的 checkbox :
点击 Build 然后静候执行的结果,通过 jenkins 的日志,我们可以看出代码分析结果已经成功推送到了 sonarqube。
我们可以打开 sonarqube 的对应项目进行查看:
通过结果我们可以看出,本次构建相对于上次构建的结果,新加的代码的单元测试覆盖达到了百分百,且没有任何代码不规范和漏洞,但是历史的代码还有很多的漏洞需要填补。
【总结】
使用 sonarqube 分析dotnet core/C#代码的全部过程以及集成jenkins已经完成了,通过通用的脚本,我们可以方便地应用到多个项目中。
如有任何疑问,欢迎在评论区讨论~
SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)的更多相关文章
- 在 k8s 中的 jenkins 集成 sonarqube 实现代码质量检查
不乱于心,不困于情,不畏将来,不念过往,如此安好 --<不宠无惊过一生>丰子恺 概述 关于在 k8s 中安装 jenkins 和 sornarqube 可以查看下面的文章: 在 k8s 中 ...
- jenkins集成sonarqube代码审核
目前在持续集成领域,除了后起之秀travis ci,在老牌工具中,最著名的还是非jenkins莫属.本篇文章简单的说一声jenkins与sonarqube的集成来实现代码的静态审核. 在这里不详细罗列 ...
- jenkins集成sonarQube实现代码质量检查
1.sonarQube的简介 SonarQube是一款自动化代码审查工具,用于检测代码中的错误.漏洞和代码异味.它可以与你现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查. 其工作流程如下: ...
- Jenkins集成SonarQube
sonar安装配置 准备软件包 安装 mysql5.6+ 创建数据库sonar,字符集编码utf8 新建用户如heboan 因为sonarqube不能使用root用户运行 调整系统参数,/etc/se ...
- Jenkins集成SonarQube遇到的报错
Jenkins集成Sonar过程中遇到的报错 1.jenkins中无法添加sonarqube的token凭证 因为添加的凭证类型错误,所以无法添加token,类型应该选择"Secret te ...
- Jenkins 集成 SonarQube Scanner
1. 安装Jenkins 下载安装包,这里我们下载war包 https://jenkins.io/download/ 运行jenkins.war的方式有两种: 第一种:将其放到tomcat中运行( ...
- jenkins集成jmeter-进阶篇
1.gitlab自动触发jenkins构建 1⃣️安装插件: 2⃣️新建工程,设置git url,build when a change is pushed auto.sh /bin/sh echo ...
- 持续集成高级篇之Jenkins Pipeline 集成sonarqube
系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...
- SonarQube系列一、Linux安装与部署
[前言] 随着项目团队规模日益壮大,项目代码量也越来越多.且不说团队成员编码水平层次不齐,即便是老手,也难免因为代码量的增加和任务的繁重而忽略代码的质量,最终的问题便是bug的增多和代码债务的堆积.因 ...
随机推荐
- STM32F0_HAL库驱动描述——LL驱动程序概述
LL驱动概述 低层(LL)驱动器旨在提供快速轻量级的专家导向层,它比硬件更接近硬件: 与HAL相反,LLAPI不适用于优化访问不是关键功能的外设设备,或者需要大量软件配置和/或复杂的高级堆栈(如USB ...
- MyBatis从入门到精通:insert用法
2.4.1 简单的insert方法 1.接口类中的方法: int insert(SysUser sysUser); 2.映射文件中的修改: <!-- insert标签包含如下的属性: id: p ...
- javascript案例之放大镜效果
效果图 如何实现该效果呢?? 我们先来进行分析 实现思路 1.鼠标移入移出事件 1>移入:悬浮块和大图显示 2>移出:悬浮块和大图隐藏 2.鼠标移动(悬浮块随着鼠标移动) 1>获 ...
- springboot+mongodb 按日期分组分页查询
List<Integer> types = new ArrayList<>(); types.add("条件1"); types.add("条件2 ...
- easypermissions的基本使用
转载请注明出处 http://blog.csdn.net/pyfysf/article/details/78204395 Android 6.0(API 级别 23)开始,在应用运行时向其授予权限,而 ...
- HTML介绍和标签
1.HTML介绍 1.概述 html不是一种编程语言,是一种描述性的标记语言,用于描述超文本内容的显示方式.比如字体,颜色,大小等. 超文本:音频,视频,图片称为超文本. 标记:<英文单词或者字 ...
- Python在office开发中的应用
Python with Excel 有几个很好的Python模块能够方便地操作Excel的数据,包括读与写,不要求本地安装Excel.例如pandas, openpyxl, xlrd, xlutils ...
- MySql(Windows)
百度云:链接:http://pan.baidu.com/s/1nvlSzMh 密码:o1cw 官网下载网址:http://dev.mysql.com/downloads/mysql/
- 如何挑选node docker镜像
如何挑选node docker镜像 在使用Jenkins构建前端项目的时候遇到一点问题: node的版本问题. 由于可能编译的项目历史不同,所依赖的node版本也各有千秋,直接把所有项目都升级到最新的 ...
- 从国际象棋与象棋的走法差异,再趣说IT人提升能力和增收方式
之前我写过篇博文,用象棋的思维趣说IT人的职业发展和钱途,发现象棋中的一些思维能应用到我们程序员平时的职业发展中. 当从大学毕业的程序员干个五六年以后,也达到了高级开发的水平,工作环境应该能摆脱动荡, ...