.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流 ...
随机推荐
- Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现
css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...
- spring boot 2.x 系列 —— actuator 服务监控与管理
文章目录 一.概念综述 1.1 端点 1.2 启用端点 1.3 暴露端点 1.4 健康检查信息 二.项目说明 1.1 项目结构说明 1.2 主要依赖 1.3 项目配置 1.4 查看监控状态 三.自定义 ...
- 一个简易的css reset
/*css reset*/ /*清除内外边距*/ body, h1, h2, h3, h4, h5, h6, p, hr, /*结构元素*/ ul, ol, li, dl, dt, dd, /*列表元 ...
- python面试题(-)可变数据类型与不可变数据类型
python3中有六个标准的数据类型:number(数字型).string(字符串型).list(列表).type(元祖).dictionary(字典).set(集合),其中不可变类型三个:numbe ...
- C语言学习推荐《C语言参考手册(原书第5版)》下载
- Java项目案例之--封装的实例
Java项目案例之---封装的实例 有一个专业类,有一个专业对象,专业名称:计算机科学与技术,专业编号:J001,专业年限:4,对年限添加约束,如果输入小于0,则默认为0,否则显示输入的值 有一个学生 ...
- 从无到有构建vue实战项目(五)
八.错误总结(一) webpack打包项目识别子组件路径问题 之所以出现了这样的问题是因为在webpack打包项目时,未将此处的子组件路径正确识别: 将此处的carousel改为carousel.vu ...
- 基于SpringCloud的Microservices架构实战案例-在线API管理
simplemall项目前几篇回顾: 1基于SpringCloud的Microservices架构实战案例-序篇 2基于SpringCloud的Microservices架构实战案例-架构拆解 3基于 ...
- Excel公式中问题-记住不要忽略空格!
总结一下之前犯得愚蠢的小问题: 程序:每日报表:从DB下载数据填充到excel,包括3个sheet,sheet1:总结<模板,公式填充,数据源为sheet2,sheet3>;sheet2: ...
- ASP.NET 前端数据绑定---<%#%>及Eval()的使用
ASP.NET 前端html代码中会经常出现的<%%>的代码,里面的文本其实就是不能直接输出到客户端浏览器的文本,是需要服务器解释的. 在ASP中,<%%>里面的文本是vbsc ...