.net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)
Sonarqube结合Jenkins与常见问题
我们引入sonarqube组件的最终目的是要为整个Ci环境服务的,如果不能集成于当前的Jenkins CI,那么我们做的很多关于sonarqube的工作都将是徒劳的.然而这一点几乎不用担心,因为我们从前面的讲解可以看到我们的构建操作都是通过命令行来进进行的,从这一点来看应该是可以无缝的集成到jenkins环境,然而我们把命令原封搬到Jenkins上发现,事情并不像想像的那么简单,而是有各种各样的坑存在.
我们运行以下前面章节运行过的代码,看看会出现什么问题:
MSBuild.SonarQube.Runner.exe begin /k:"mytest" /n:"mytest" /v:"v8.0" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"
msbuild.exe
"E:\personalproject\newTest2018\ConsoleApp1\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\bin\Debug\NunitTest.dll"
MSBuild.SonarQube.Runner.exe end
运行以上命令根据可能会出现以下问题:
问题1 命令找不到
可能会有童鞋遇到MSBuild.SonarQube.Runner.exe
is not recognized as an internal or external command,operable program or batch file.
当然可能有些童鞋不会遇到这个问题,这主要取决于环境变量path的设置
可以看到这个界面有两个地方可以设置path,上面是用户级别的,下面是系统级别的,如果你是在上面用户级别设置的path,则Jenkins无法读取到(这里仅仅是指默认情况下)当前用户变量的,因为Jenkins执行用户和当前用户并不是同一个用户.(大家可以在jenkins里执行whoami来看下jenkins里的执行用户).这里有两个解决办法:第一种办法就是指定可执行文件MSBuild.SonarQube.Runner.exe
的完整路径(其它可执行文件也一样),第二,把环境变量添加到全局配置里.加到全局变量里虽然方便了,但是全局变量的总长度是有限制的,如果配置的过多很容易超出限制,还有一点问题就是像mono在安装的时候全自动添加很多环境变量,如果用户装了mono,使用全局的msbuild编译有时候会造成编译的结果和指定完整路径的编译结果不一致,这一点请用户自己斟酌.
问题2 相对路径问题
以上代码中我们使用了%CD%
,我们前面的示例都是在工程目录下执行的,%CD%即为当前目录,而在Jenkins环境中,当前目录是Jenkins\workspace\项目名
,如果处理不当,会导致编译错误.
第二段msbuild.exe
也是一样问题,它必须在工程目录下的时候才不需要指定要编译的项目名,如果当前目录下没有sln或者csproj文件,则需要显式指定项项目文件的完整路径如msbuild.exe "E:\personalproject\newTest2018\ConsoleApp1\NunitTest\NunitTest.csproj"
问题3 路径是否需要加引号
这其实是一个常见的问题,我们会发现有时候路径不带引号不会出现问题,有时候会出现问题,就笔者的经验,如果路径中没有空格则不用加引号,如果有则需要加引号.因此为了避免不必要的麻烦,建议的最佳实践是路径都加上引号.
问题4 默认Jenkins账户无法编译Sonarqube项目
我们把所有的问题都解决完之后,会发现Jenkins仍然构建失败,提示信息如下Running the Scanner for MSBuild under Local System or Network Service account is not supported. Please, use a local or domain user account instead.
以上错误明确提出,Sonarqube MSbuild 扫描器不支持本地系统账户或者网络服务账户,需要使用普通账户登陆.下面我们讲一下如何处理这个问题.
我们打开windows cmd执行whoami查看一下当前用户:
右击我的电脑
选择管理
然后从管理界面里面找到服务
或者在cmd界面输入services.msc
来打开服务管理界面,从服务管理界面找到jenkins
服务,右键点击属性
,在弹出的对话框中切换到登陆
标签,如果没有登陆则是本地败,我们选择此账户
然后输入账户和密码点击确定.
完成以上操作以后重新启动jenkins服务然后再执行脚本,就可以编译通过了.
.net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)的更多相关文章
- .net持续集成sonarqube篇之 sonarqube与jenkins集成(插件模式)
系列目录 Jenkins通过插件集成Sonarqube 通过上一节我们了解了如何配置以使jenkins ci环境中可以执行sonarqube构建,其实Sonarqube官方也提供了jenkins插件以 ...
- .net持续集成sonarqube篇之 sonarqube触发webhook
系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...
- .net持续集成sonarqube篇之sonarqube基本操作(一)
系列目录 Sonarqube Web管理界面虽然设计的简洁大方,也非常直观,但是由于功能繁多,这对快速入手以及快速定位到想要的功能都是一个挑战,在以后的几个小节里我们简要介绍. OwerView(概览 ...
- .net持续集成sonarqube篇之 sonarqube集成单元测试
系列目录 通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0% 这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告. 这里需要借助O ...
- .net持续集成sonarqube篇之sonarqube安装与基本配置
系列目录 Sonarqube下载与安装 Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装 ...
- .net持续集成sonarqube篇之sonarqube基本操作(二)
系列目录 Activity界面操作 Activity界面主要是对多次构建管理界面,主要是帮助管理员快速了解项目每次构建与以往构建相比问题是增加了还是减少了等指标.由于目前我们仅进行了一次构建,因此没有 ...
- [持续集成学习篇]【1】[jenkins安装与配置]
Guided Tour This guided tour will use the "standalone" Jenkins distribution which requires ...
- Jenkins集成allure测试报告
前言 Allure框架是一个功能强大的自动化测试报告工具,不仅支持多种编程语言,而且能够完美的与各种集成工具结合,包括Jenkins,TeamCity,Bamboo,Maven等等,因此受到了很多测试 ...
- 持续集成高级篇之Jenkins Pipeline 集成sonarqube
系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...
随机推荐
- .NET开发框架(一)-框架介绍与视频演示
本文主要介绍一套基于.NET CORE的SPA高并发.高可用的开发框架. 我们暂且称它为:(让你懂.NET)开发框架. 以此为主线,陆续编写教程,讲述如何构建高并发.高可用的框架. (欢迎转载与分享) ...
- .NET平台简介
前言: 看到一个名词:搜商(SQ),还挺有趣.讲的是在互联网时代,怎么能够快速找到自己所需信息或资源,成为一种能力,并将其提升到类似智商.情商的概念.在以后工作过程中,尽量提高自己获取.辨别.处理信息 ...
- OVS实现VXLAN隔离
一.实验环境 1.准备3个CentOS7 mini版本的虚拟机,每个主机3个网卡.如图: 图中OVS-1.OVS-2.OVS-3分别为三台CentOS7 mini版虚拟机,分别配备3个虚拟网卡.如图中 ...
- Kafka 学习之路(五)—— 深入理解Kafka副本机制
一.Kafka集群 Kafka使用Zookeeper来维护集群成员(brokers)的信息.每个broker都有一个唯一标识broker.id,用于标识自己在集群中的身份,可以在配置文件server. ...
- MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 多表查询 上篇博客中,我们示例的 ...
- laravel配置不同环境的配置文件
//在入口bootstrap/App.php中 $env = $app->detectEnvironment( function () use ($app) { $uname = php_una ...
- docker无法启动
docker无法启动 docker启动时报错Error starting daemon: SELinux is not supported with the overlay2 graph driver ...
- Netty源码分析-- 处理客户端接入请求(八)
这一节我们来一起看下,一个客户端接入进来是什么情况.首先我们根据之前的分析,先启动服务端,然后打一个断点. 这个断点打在哪里呢?就是NioEventLoop上的select方法上. 然后我们启动一个客 ...
- 利用Python模拟GitHub登录
最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...
- Web自动化测试 三 ----- DOM对象和元素查找
一.DOM对象 DOM(Document Object Model文档对象模型):将HTML的各种元素映射为JS可访问的对象.HTML文档中的所有内容都是节点,这些东西在HTML中我们称为元素. 整个 ...