SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

摘要:
将上一篇文章中的sonarqube命令集成到shell脚本中,并将shell脚本集成到jenkins中[将sonarqube命令集成到shell脚本中]。由于使用了Linux服务器,#是否执行当前脚本execute=$1#测试项目testDir的完整路径=$2if[${execute}==false];开始。。。“#要使用此方法,您需要在测试项目中安装nuget包:

【前言】

本系列主要讲述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=$1
#test项目全路径
testDir=$2

if [ ${execute} == false ];then
    echo "7tiny: There is nothing to execute!"
    exit 0
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 [ $? != 0 ];then
    exit 1
fi

echo "7tiny:test finished!"

exit 0

 参数:

  • execute:是否执行脚本(便于和jenkins的checkbox结合,如不需要传true即可)
  • testDir:test项目 xxxtexst.csproj 文件完整目录地址

2.整合 dotnet sonarscanner 命令

#是否执行当前脚本
execute=$1
#要构建的解决方案名称
solutionName=$2
#.sln文件全路径
solutionDir=$3

if [ ${execute} == false ];then
    echo "7tiny: There is nothing to execute!"
    exit 0
fi

echo "7tiny:begin scanner..."

export PATH=${PATH}:${HOME}/.dotnet/tools

dotnet sonarscanner begin /k:${solutionName} /n:${solutionName} /v:${BUILD_NUMBER}

if [ $? != 0 ];then
    exit 1
fi

dotnet build ${solutionDir}

if [ $? != 0 ];then
    exit 1
fi

dotnet sonarscanner end 

if [ $? != 0 ];then
    exit 1
fi

echo "7tiny:scanner finished!"

exit 0

 参数:

  • execute:是否执行脚本(便于和jenkins的checkbox结合,如不需要传true即可)
  • solutionName:要构建的解决方案名称
  • solutionDir:.sln文件全路径

脚本里面默认将解决方案的名称当作 sonarqube 中的项目名称;将 jenkins 编译的版本号当作 sonarqube 的活动编号;

3.将shell脚本到服务器 jenkins 可以访问的目录

我们将上述两个 shell 脚本存为 xxx.shell 并存放到服务器上,以便使用 jenkins 调用执行,比如我这里将两个文件存到了服务器某位置:

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第1张

【将shell脚本整合到jenkins中】

有了shell 脚本,那么 jenkins 的整合便非常容易了,我们只需要在 jenkins 的 shell 命令框调用写好的 shell 脚本, 并将参数传递进去即可。

例如:

打开 jenkins 中的的某个项目的项目配置:

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第2张

然后在最下面的 Build 区域 Execute Shell 框内填写相应的 shell 命令,当然是调用我们的 shell 脚本:

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第3张

依次调用了:

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

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

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

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第4张

【Jenkins编译执行代码分析】

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

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第5张

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

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第6张

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

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)第7张

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

【总结】

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

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

免责声明:文章转载自《SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇macOS 10.13允许任何来源开启方法微信小程序----团购或秒杀的批量倒计时实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

利用shell脚本调用ansible自动化实现企业备份基本环境

inotify+rsync实时监控推送NFS挂载目录脚本 #!/bin/bash Path=/data /usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data | whileread line do if [ -f $line ];the...

自动化测试报告allure 并集成到Jenkins 分布式配置

1.下载安装allure 下载.zip包 allure-commandline-2.13.2.zip 解压后,将文件夹下的bin目录配置环境变量 在cmd中输入allure,出现命令提示说明安装成功 2.安装allure包后,安装allure的pytest的绑定包 pip install allure-pytest 即allure-pytest是pyt...

jenkins X实践系列(4) —— jenkins X 构建提速

jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,这里为第4篇,介绍如何加入jx构建和部署。 builder镜像下载慢 先在一台机器上下载好,然后放到本地仓库,到jenkins的setting里,修改镜像地址 nodejs安装慢 配置使用私服 构建cnpm镜像 1 FROM jenkinsxio/bu...

OpenStack实战(一)

  OpenStack作为当前发展势头迅猛的云计算开源项目,去年进行了一些了解,现在有空回来进行一些补充记录,当时实战的版本是那会最新版本,当然现在已经更新了好几版了,不过还是那句话“这些丝毫不影响,了解这个事物的本质,继续...”   作为一个对OpenStack是何物完全不知道,对“云计算”也是仅仅了解泛泛的我,要啃OpenStack这个骨头,先得了解...

Jenkins学习之——(2)插件的安装

本章节将讲解如何安装jenkins的插件。 其实jenkins本身不具有任何集成的功能,而是依靠众多的插件实现功能。就像eclipse一样,期本身只是一个编辑器,而当你安装了其他的第三方插件后,就能实现很多强大的功能。 插件的安装过程很简单,就直接上图了 1. 2. 3. 这里面选择要安装的插件啊,然后点击底部的直接安装就行了。 有时候网络安装会出问...

CSS之Normalize.css的使用(重置表)

本文译自Normalize.css官网: http://nicolasgallagher.com/about-normalize-css/ Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性。相比于传统的CSS reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。N...