【前言】

本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目。目录如下:

  1. SonarQube系列一、Linux安装与部署
  2. SonarQube系列二、分析dotnet core/C#代码
  3. SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

【实现功能】

  这篇文章将要介绍的主要内容如下:

  1. 将上一篇文章中的sonarqube命令整合为shell脚本
  2. 将 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 脚本:

依次调用了:

  1. 编译打包发布nuget
  2. 执行test
  3. 执行sonar canner

每个脚本的第一个参数都是是否执行,以便于我们配置 checkbox 决定是否执行某个脚本,其他参数按顺序传入即可。

checkbox 的配置方式:
我这里选择 boolean 参数的配置,然后我们在 build 的时候就可以自行决定是否选择。

【Jenkins编译执行代码分析】

我们本次不进行nuget打包,只进行代码分析,因此选择代码分析的 checkbox :

点击 Build 然后静候执行的结果,通过 jenkins 的日志,我们可以看出代码分析结果已经成功推送到了 sonarqube。

我们可以打开 sonarqube 的对应项目进行查看:

通过结果我们可以看出,本次构建相对于上次构建的结果,新加的代码的单元测试覆盖达到了百分百,且没有任何代码不规范和漏洞,但是历史的代码还有很多的漏洞需要填补。

【总结】

使用 sonarqube 分析dotnet core/C#代码的全部过程以及集成jenkins已经完成了,通过通用的脚本,我们可以方便地应用到多个项目中。

如有任何疑问,欢迎在评论区讨论~

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)的更多相关文章

  1. 在 k8s 中的 jenkins 集成 sonarqube 实现代码质量检查

    不乱于心,不困于情,不畏将来,不念过往,如此安好 --<不宠无惊过一生>丰子恺 概述 关于在 k8s 中安装 jenkins 和 sornarqube 可以查看下面的文章: 在 k8s 中 ...

  2. jenkins集成sonarqube代码审核

    目前在持续集成领域,除了后起之秀travis ci,在老牌工具中,最著名的还是非jenkins莫属.本篇文章简单的说一声jenkins与sonarqube的集成来实现代码的静态审核. 在这里不详细罗列 ...

  3. jenkins集成sonarQube实现代码质量检查

    1.sonarQube的简介 SonarQube是一款自动化代码审查工具,用于检测代码中的错误.漏洞和代码异味.它可以与你现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查. 其工作流程如下: ...

  4. Jenkins集成SonarQube

    sonar安装配置 准备软件包 安装 mysql5.6+ 创建数据库sonar,字符集编码utf8 新建用户如heboan 因为sonarqube不能使用root用户运行 调整系统参数,/etc/se ...

  5. Jenkins集成SonarQube遇到的报错

    Jenkins集成Sonar过程中遇到的报错 1.jenkins中无法添加sonarqube的token凭证 因为添加的凭证类型错误,所以无法添加token,类型应该选择"Secret te ...

  6. Jenkins 集成 SonarQube Scanner

    1.   安装Jenkins 下载安装包,这里我们下载war包 https://jenkins.io/download/ 运行jenkins.war的方式有两种: 第一种:将其放到tomcat中运行( ...

  7. jenkins集成jmeter-进阶篇

    1.gitlab自动触发jenkins构建 1⃣️安装插件: 2⃣️新建工程,设置git url,build when a change is pushed auto.sh /bin/sh echo ...

  8. 持续集成高级篇之Jenkins Pipeline 集成sonarqube

    系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...

  9. SonarQube系列一、Linux安装与部署

    [前言] 随着项目团队规模日益壮大,项目代码量也越来越多.且不说团队成员编码水平层次不齐,即便是老手,也难免因为代码量的增加和任务的繁重而忽略代码的质量,最终的问题便是bug的增多和代码债务的堆积.因 ...

随机推荐

  1. xtrabackup 全量备份、恢复数据

    1.全量备份 [root@localhost lib]##innobackupex --defaults-file=$defaults_file --user=$mysql_username --pa ...

  2. Docker笔记(三):Docker安装与配置

    原文地址:http://blog.jboost.cn/2019/07/14/docker-3.html Docker分为Docker CE社区免费版与Docker EE企业收费版.Docker EE主 ...

  3. shell_umask用法

    我曾经用touch命令创建一个文件script,默认的权限是"rw-r- -r- -",有的朋友就有可能问为什么是这种组合?其实,这正是umask命令捣的鬼.在linux上输入:u ...

  4. 性能测试-实例讲解VU、RPS、RT公式换算

    概述 今天看到一篇文章讲解VU.RPS.RT,中间有一个公式如下图 并发数 = RPS * 响应时间  于是我在本地做了几次实验,试图验证一下公式的准确性 实验网站 www.baidu.com 第一次 ...

  5. 洛谷P3275 [SCOI2011]糖果 题解

    题目链接: https://www.luogu.org/problemnew/show/P3275 分析: 本题就是一个裸的差分约束. 核心: x=1x=1x=1时,a=b,a−>b,b−> ...

  6. openlayer 5 获取中心点

    之前在控制台把map对象打印出来后,有一个很像中心点坐标map.focus_.我可以确定的告诉大家,这个不是中心点坐标,检查出来的结果是地图中心最右的点位. 在创建地图时,会将中心点左边写在view中 ...

  7. bootstrap table 父子表实现【无限级】菜单管理功能

    bootstrap table 父子表实现[无限级]菜单管理功能 实现效果 前端代码 <%@ page language="java" import="java.u ...

  8. 【原创】这一次,Chrome表现和IE11一样令人失望,围观群众有:Edge,Firefox

    前言 俗话说,常在河边走哪能不湿鞋,天天和浏览器打交道,发现浏览器竟然也隐藏BUG也不是新鲜事了.可以看下我之前的文章: [原创]分享IE7一个神奇的BUG(不是封闭标签的问题,的确是IE7的BUG) ...

  9. Java基础之分支结构循环结构

    流程控制语句if(分支结构) 流程控制:流程就是指代码运行过程.控制就是说什么场景可以执行,什么场景不能执行. 1.if语句第一种形式 格式:if(表达式){      执行的语句:     } 2. ...

  10. 0 ElasticSearch

    注意事项 需要jdk环境1.7以上 Elasticsearch Kibana 的下载地址统一为https://www.elastic.co/downloads/ 问题排查可以登录https://dis ...