.net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)

系列目录html

Sonarqube结合Jenkins与常见问题

咱们引入sonarqube组件的最终目的是要为整个Ci环境服务的,若是不能集成于当前的Jenkins CI,那么咱们作的不少关于sonarqube的工做都将是徒劳的.然而这一点几乎不用担忧,由于咱们从前面的讲解能够看到咱们的构建操做都是经过命令行来进进行的,从这一点来看应该是能够无缝的集成到jenkins环境,然而咱们把命令原封搬到Jenkins上发现,事情并不像想像的那么简单,而是有各类各样的坑存在.windows

咱们运行如下前面章节运行过的代码,看看会出现什么问题:网络

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

运行以上命令根据可能会出现如下问题:dom

问题1 命令找不到

可能会有童鞋遇到MSBuild.SonarQube.Runner.exe is not recognized as an internal or external command,operable program or batch file.ui

固然可能有些童鞋不会遇到这个问题,这主要取决于环境变量path的设置spa

avatar
能够看到这个界面有两个地方能够设置path,上面是用户级别的,下面是系统级别的,若是你是在上面用户级别设置的path,则Jenkins没法读取到(这里仅仅是指默认状况下)当前用户变量的,由于Jenkins执行用户和当前用户并非同一个用户.(你们能够在jenkins里执行whoami来看下jenkins里的执行用户).这里有两个解决办法:第一种办法就是指定可执行文件MSBuild.SonarQube.Runner.exe的完整路径(其它可执行文件也同样),第二,把环境变量添加到全局配置里.加到全局变量里虽然方便了,可是全局变量的总长度是有限制的,若是配置的过多很容易超出限制,还有一点问题就是像mono在安装的时候全自动添加不少环境变量,若是用户装了mono,使用全局的msbuild编译有时候会形成编译的结果和指定完整路径的编译结果不一致,这一点请用户本身斟酌.命令行

问题2 相对路径问题

以上代码中咱们使用了%CD%,咱们前面的示例都是在工程目录下执行的,%CD%即为当前目录,而在Jenkins环境中,当前目录是Jenkins\workspace\项目名,若是处理不当,会致使编译错误.3d

第二段msbuild.exe也是同样问题,它必须在工程目录下的时候才不须要指定要编译的项目名,若是当前目录下没有sln或者csproj文件,则须要显式指定项项目文件的完整路径如msbuild.exe "E:\personalproject\newTest2018\ConsoleApp1\NunitTest\NunitTest.csproj"code

问题3 路径是否须要加引号

这实际上是一个常见的问题,咱们会发现有时候路径不带引号不会出现问题,有时候会出现问题,就笔者的经验,若是路径中没有空格则不用加引号,若是有则须要加引号.所以为了不没必要要的麻烦,建议的最佳实践是路径都加上引号.xml

问题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查看一下当前用户:
avatar

右击个人电脑选择管理而后从管理界面里面找到服务或者在cmd界面输入services.msc来打开服务管理界面,从服务管理界面找到jenkins服务,右键点击属性,在弹出的对话框中切换到登录标签,若是没有登录则是本地败,咱们选择此帐户

avatar
而后输入帐户和密码点击肯定.

完成以上操做之后从新启动jenkins服务而后再执行脚本,就能够编译经过了.