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,一经查实,立即删除!

相关文章

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;但是这里不同的就是有可能在道路上有许多的环。 题目有一个重点提示的一句话 理解这句话之后那么我们可以显然…

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

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

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…

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

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

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

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

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

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

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

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

【LOJ#572】Misaka Network 与求和(莫比乌斯反演/杜教筛/min_25筛)

【LOJ#572】Misaka Network 与求和 https://www.cnblogs.com/cjyyb/p/10170630.html 看到次大质因子就可以想到是min_25筛了&#xff0c;然后只需要做莫比乌斯反演&#xff0c;然后预处理整除分块点的前缀和&#xff0c;然后再结合杜教筛即可。

软件设计的第一性原理:结构化抽象

软件设计的第一性原理&#xff0c;是结构化抽象。术生于道&#xff0c;技术生于原理。引语所谓的第一性原理&#xff0c;就是无论使用什么方法论&#xff0c;都无法绕过的那最最基础的部分。无论是 DDD 设计&#xff0c;还是面向模式的架构设计&#xff0c;或 微服务架构&#…

基于.NetCore结合docker-compose实践Gitlab-CI/CD 排坑指南

引言看过docker-compose真香的园友可能留意到当时是【把部署dll文件拷贝到生产机器】&#xff0c;即时打包成镜像并启动容器&#xff0c;并没有完成CI/CD。经过长时间实操验证&#xff0c;终于完成基于Gitlab的CI/CD实践&#xff0c;本次实践的坑位很多&#xff0c; 实操过程尽…

.NET Core很酷,你不得不知

我一直回想我的第一篇博文&#xff0c;那是关于多个服务的服务器平台的详细教程&#xff0c;它使用 GitLab CI 在 AWS 上&#xff0c;当时使用单个命令行进行部署&#xff0c; 至今回想&#xff0c;令人感觉很酷。前几天&#xff0c;我偶然听说一些软件公司的 HR 在招聘原则上拒…

程序员修神之路--高并发系统设计负载均衡架构

点击上方“蓝字”关注&#xff0c;酷爽一夏菜菜哥&#xff0c;上次你给我讲的分库分表策略对我帮助很大有帮助就好&#xff0c;上次请我的咖啡也很好喝~呵呵&#xff0c;不过随着访问量的不断加大&#xff0c;网站我又加了nginx做负载均衡好呀&#xff0c;看来要进阶高级工程师…

【学习笔记】Docker - 01. Docker是啥

我只是把之前的学习笔记整理一下&#xff0c;贴到这里&#xff0c;可能会显得比较凌乱。。。1.1 啥是Docker?Docker 是一个开源项目&#xff0c;它被用来做构建、打包和运行程序。它是一个命令行程序&#xff0c;一个后台进程&#xff0c;也是一组使用逻辑方法来解决常见软件问…

使用 .NET CORE 创建 项目模板,模板项目,Template

场景&#xff1a;日常工作中&#xff0c;你可能会碰到需要新建一个全新的解决方案的情况&#xff08;如公司新起了一个新项目&#xff0c;需要有全新配套的后台程序&#xff09;&#xff0c;如果公司内部基础框架较多、解决方案需要DDD模式等&#xff0c;那么从新起项目到各种依…

谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能

一、前言surging是基于.NET CORE 服务引擎。初始版本诞生于2017年6月份&#xff0c;经过NCC社区二年的孵化&#xff0c;2.0版本将在2019年08月28日进行发布&#xff0c;经历二年的发展&#xff0c;已经全部攘括了微服务架构的技术栈&#xff0c;覆盖了从服务注册、服务发现、中…

奇淫巧技-Flutter调用C#

前言众所周知&#xff0c;Xamarin应该是.net下的跨平台开发工具。2016年之前还处于收费状态&#xff0c;后被微软收购后开源。但似乎有个现象&#xff0c;开源后的Xamarin发展似乎有些停滞&#xff0c;而且维护Xamarin的团队又很固执不愿变通。社区多次建议UI层应该统一绘图引擎…

.NET World——gPRC概览

官方的定义&#xff1a;gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authen…