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

来源:https://www.cnblogs.com/7tiny/p/11348785.html

640?wx_fmt=jpeg

【前言】

本系列主要讲述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 调用执行,比如我这里将两个文件存到了服务器某位置:

640?wx_fmt=png

【将shell脚本整合到jenkins中】

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

例如:

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

640?wx_fmt=png

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

640?wx_fmt=png

依次调用了:

  1. 编译打包发布nuget

  2. 执行test

  3. 执行sonar canner

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

checkbox 的配置方式:

640?wx_fmt=png

【Jenkins编译执行代码分析】

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

【总结】

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

-END-


smiley_66.png

640?wx_fmt=jpeg


点个赞,让我在心里记住你 ☟

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

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

相关文章

[2020多校A层11.22]party(概率期望/近似)

[2020多校A层11.22]party 非常巧妙的一个概率期望问题,其实运用的还是近似的思想 现在有n个物品,每次一个人有pi的概率选中这个物品,然后可以进行猜测,但是无论是否猜中都继续游戏,直到所有人都被猜中,求解…

E. Beautiful Subarrays(思维 01 trie 树)

E. Beautiful Subarrays 思路 显然有ai⨁ai1⨁……⨁an(a1⨁a2⨁……⨁an)⨁(a1⨁a2⨁……⨁ai−1)a_i\bigoplus a_{i 1} \bigoplus ……\bigoplus a_{n} (a_1 \bigoplus a_2 \bigoplus……\bigoplus a_{n}) \bigoplus (a_1 \bigoplus a_2 \bigoplus …… \bigoplus a_{i -…

CF198D Cube Snake(三维空间/增量构造)

CF198D Cube Snake n<50 显然是一个构造题&#xff0c;然后很容易想到增量构造&#xff0c;可以考虑每次保证一层值域连续&#xff0c;然后再增加一个值域连续的层&#xff0c;就会产生两个值域连续的正方体&#xff0c;但是只移动头是不够的&#xff0c;所以我们还需要移…

发布ABP v0.19包含Angular UI选项

ABP v0.19已发布,包含解决的~90个问题和600次提交.新功能Angular UI终于,ABP有了一个SPA UI选项,使用最新的Angular框架.Angular的集成不是简单地创建了一个启动模板.创建了一个基础架构来处理ABP的模块化,主题和其他一些功能.此基础结构已部署为NPM包.为帐户,身份和租户管理等…

P4151 [WC2011]最大XOR和路径(线性基应用)

P4151 [WC2011]最大XOR和路径 思路 如果单纯的只是树形图&#xff0c;那么答案显然易见只有一种&#xff0c;也就是从头到尾的路径从头到尾的异或值&#xff0c;但是这里不同的就是有可能在道路上有许多的环。 题目有一个重点提示的一句话 理解这句话之后那么我们可以显然…

CF603D Ruminations on Ruminants(计算几何/Simson theorem)

CF603D Ruminations on Ruminants 给定n条直线&#xff0c;两两不平行&#xff0c;且任意三条直线不经过同一个点&#xff0c;然后求解满足原点在外接圆上的由三条直线围成的三角形有多少个。 首先这道题只需要知道Simson theorem就可以做了。 定理内容是三角形外接圆上的点到…

Docker(一)-CentOS7中安装Docker视频教程

一、前言Docker的使用越来越多&#xff0c;安装也相对简单。本文使用视频的方式展示在CentOS7系统中安装Docker&#xff0c;本文更适合于准备入门学习Docker的童靴&#xff0c;同时也欢迎各路大神给我们指点提建议。二、环境CentOS7三、安装Docker确认Linux内核版本# uname -a卸…

P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)

P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写&#xff0c; 但是这里变成了求任意个数的异或最大值。如果给定区间我们显然可以通过线性基来求解&#xff0c;但是这里是动态的区间&#xff0c;每次区间需要我们去找&…

CF773E Blog Post Rating(推导min的通项/线段树)

CF773E Blog Post Rating 现在有一个值F&#xff0c;每次如果序列加入一个数后重新排列&#xff0c;每次如果F小于期望值&#xff0c;就会1&#xff0c;如果等于就不变&#xff0c;如果大于就-1&#xff0c;求解每一次加入后F的最大值。 这道题的确是非常的巧妙&#xff0c;尤…

用Keras.NET 做一个图像识别的训练

.NET Core 的应用场景越来越广&#xff0c;开源社区也不断壮大&#xff0c; .NET Core在机器学习领域不断发展ML.NET外&#xff0c;也通过结合Tensorflow.NET去完善ML.NET在深度学习领域的功能&#xff0c;在ML.NET 1.3开始迈出了非常重要的一步。这不仅是微软拥抱开源的策略&a…

2019牛客多校第四场 B xor (线性基求交)

xor 思路 题目是要求[l,r][l, r][l,r]的所有集合是否都可以得到xxx&#xff0c;那么显然我们可以对这[l,r][l, r][l,r]个线性基求交&#xff0c;然后再特判能否xxx能否插入&#xff0c;如果能插入&#xff0c;显然输出NONONO&#xff0c;否则就输出YESYESYES&#xff0c;所以…

「数据ETL」从数据民工到数据白领蜕变之旅(六)-将Python的能力嫁接到SSIS中...

前一篇推文中&#xff0c;给大家演示了在SSIS上使用dotNET脚本&#xff0c;实现一些原生SSIS难以实现的功能&#xff0c;并冠以无限可能的说法。充分复用python的现有优势python的确是一门非常优秀的编程语言&#xff0c;特别是在数据领域&#xff0c;网络爬虫、数据处理、分析…

.NET Core玩转爬虫系列之借助正则表达式入门篇

接下来一段时间&#xff0c;我会花些时间研究C#玩转爬虫的方法及其实践。话不多说&#xff0c;开始吧~一般来说:设计并实现一个爬虫的步骤是:模拟登录 -> 模拟发送request请求 -> 取回response数据 -> 提取所需信息并将其进行重新组织 -> 存入DB或文件中 -> 后期…

单位根反演

单位根反演 https://www.cnblogs.com/cjyyb/p/10838495.html

ASP.NET Core on K8S深入学习(5)Rolling Update

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。01—What is Rolling Update?为了服务升级过程中提供可持续的不中断的服务&#xff0c;K8S提供了Rolling Update机制&#xff0c;它可以使得服务近乎无缝地平滑升级&…

LOJ6053简单的函数(min_25筛)

LOJ6053简单的函数 https://loj.ac/p/6053 min_25筛模板题&#xff0c;但是要注意质数点有2比较特殊&#xff0c;需要在y0的时候特判质数包含2的情况。 #include<bits/stdc.h> #define LL long long using namespace std; inline LL read() {char x\0;LL fh1,sum0;for(…

HDU 5608 function (杜教筛)

function 推式子 n2−3n2∑d∣nf(d)calulateS(n)∑i1nf(i)mod1097n ^ 2 - 3n 2 \sum_{d \mid n} f(d)\\ calulate\ S(n) \sum_{i 1} ^{n} f(i) \bmod 10 ^9 7\\ n2−3n2d∣n∑​f(d)calulate S(n)i1∑n​f(i)mod1097 考虑对式子进行化简 ∑i1n(i2−3i2)∑i1n∑d∣if(d)∑…

依赖注入在 dotnet core 中实现与使用:1 基本概念

关于 Microsoft Extension: DependencyInjection 的介绍已经很多&#xff0c;但是多数偏重于实现原理和一些特定的实现场景。作为 dotnet core 的核心基石&#xff0c;这里准备全面介绍它的概念、原理和使用。这里首先介绍概念部分。1. 概念该项目在 GitHub 的地址&#xff1a;…

【UOJ#188】Sanrd(min_25筛)

【UOJ#188】Sanrd&#xff08;min_25筛&#xff09; 求解区间[l,r]中所有数次大质因子的和&#xff0c;对于p^k的贡献当k大于1时定义为p&#xff0c;等于1时定义为0. 利用min_25筛第二部分&#xff0c;每一次筛掉的就是最小质因子的幂次&#xff0c;所以当前所在S(x,y)的质数…

HDU 5528 Count a * b

Count a * b 推式子 f(n)∑i0n−1∑j0n−1n∤ijn2−∑i1n∑j1nn∣ijn2−∑i1n∑j1nngcd(i,n)∣igcd(i,n)jn2−∑i1nnngcd(i,n)n2−∑i1ngcd(i,n)n2−∑d∣nd∑i1n(gcd(i,n)d)n2−∑d∣nd∑i1nd(gcd(i,nd)1)n2−∑d∣ndϕ(nd)f(n) \sum_{i 0} ^{n - 1} \sum_{j 0} ^ {n - 1} …