jenkins集成sonar问题记录(代码片段)

程序员涂小哥 程序员涂小哥     2022-12-13     538

关键词:

前言

jenkins集成sonar,今天终于跑通了,回头去看似乎很简单,但是实际的过程依然是充满了曲折,尤其是有些细节问题,时间久了多半还是很容易忘记的,因此决定还是做个记录。

sonar-scanner安装问题

首先,jenkins集成sonar需要安装"SonarQube Scanner for Jenkins"这个插件,插件安装完了之后,需要进行工具的配置,这个配置路径是"系统管理-》全局工具配置-》SonarQube Scanner"。

在这个配置中,需要制定一个sonar的客户端程序,可以直接在jenkins的页面上选择安装,但是我这样操作的时候始终下载不成功,尽管下载源修改了,依旧是没能成功。
于是就只好换了一个方法,去官网下载,即下边这个url:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
上边url里提供了一些sonar-scanner-cli的下载,但是即便我下载了里边最老的版本,最终发现使用的也是jdk11。
暂时不确定是否能在这种情况下强行使用jdk8,所以我就又去其他网站找到了3.X的版本。

几个关键的配置

上边已经提到了一个配置,即sonarQube-scanner-cli的配置,也就是客户端。
除了客户端之外,还需要配置sonar服务端,配置路径是"系统管理-》系统配置-》SonarQube servers"。

在这个配置里,需要指定sonar服务端的url和请求服务端是的用户凭证,所以还需要一个配置就是token,配置路径是"系统管理-》manage credentials-》添加凭据"。

这里需要注意的是凭据类型要选择secret text,secret就是sonar中的auth token,在sonar页面第一次登陆的时候会提示进行设置。

实际上,这里还有一些细节是需要注意的,否则很可能就会和我一样导致后边的那些问题,这些细节待下边具体问题说到的时候再说。

基本参数

sonar扫描的时候是需要一个基础参数的,可以直接在jenkins中配置,也可以放在项目的配置文件中,我选择的是放在项目的配置文件中,即在项目根目录(pom.xml同级目录)创建sonar-project.properties,里边类容如下:

sonar.projectKey=my:project
sonar.projectVersion=1.0
sonar.projectName=Springboot base
sonar.language=java
sonar.sourceEncoding=UTF-8

sonar.sources=.
sonar.java.binaries=.

这些配置实际是从网上找来的,目前来说,直接影响运行的是最后两个配置,如果配的不对,将会导致找不到文件。

jenkins pipeline问题

做了sonar的基本配置后,还需要添加触发sonar扫描的步骤,也可以直接在jenkins页面上操作,不过想着这种可能多半不会在正式项目中使用,所以最终我选择了直接在jenkinsFile中增加相应的步骤,代码如下:

stage('Code Analysis')
	steps
		echo "【Code Analysis】"
		script
			def sonarHome = tool name: 'sonarqube3.3.0',type: 'hudson.plugins.sonar.SonarRunnerInstallation'
			echo "$sonarHome"
			withSonarQubeEnv('sonarqube3.3.0')
				sh "$sonarHome/bin/sonar-scanner -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_AUTH_TOKEN"
			
		
	

这里就有一个细节需要注意,这里的"tool name: ‘sonarqube3.3.0’",从整体代码可以看到最终是获取了一个"sonar-scanner"命令的路径,很显然,这是客户端相关的,所以这里的"sonarqube3.3.0"其实是对应的sonarQube-scanner-cli中配置的那个名字。
而"withSonarQubeEnv(‘sonarqube3.3.0’)“这个实际是sonar服务端配置相关的,主要是和” S O N A R H O S T U R L " 、 " SONAR_HOST_URL"、" SONARHOSTURL""SONAR_AUTH_TOKEN“这两个变量有关系。
这两个变量也是在系统配置那里配置,然后配置SonarQube servers的时候需要勾选上"Environment variables”。
起初我没有明白这种关系,所以一开始以为都只是随便定义的,于是直接复制的代码没有修改,配置的是"withSonarQubeEnv(‘sonar’)",结果运行的时候就抛出了如下异常:

ERROR: SonarQube installation defined in this job (sonar) does not match any

server url问题

在解决了上边的问题后,我依旧运行失败,日志中出现了如下异常:

ERROR: SonarQube server [192.168.19.200:9000] can not be reached
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 0.651s
INFO: Final Memory: 3M/57M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
ERROR: Unable to execute SonarQube
ERROR: Caused by: Fail to get bootstrap index from server
ERROR: Caused by: Expected URL scheme 'http' or 'https' but no colon was found
ERROR: 
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

这个提示相对还是比较清晰的,明确的说了预期url应该是带有"http"或者"https"的,我一开始在"SonarQube servers"中配置的是"192.168.19.200:9000"。
所以这个问题解决起来也很简单,就是在配置的环境变量"SONAR_HOST_URL"里加上协议。

JSONException问题

在解决了上边协议配置问题再运行的时候,还是失败,日志中出现了如下的提示:

Pipeline] End of Pipeline
hudson.remoting.ProxyException: net.sf.json.JSONException: Invalid JSON String
	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:143)
	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:103)
	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84)
server——

这个问题,实际是解决上边问题时留下的坑。
我一开始没有看明白为什么,百度后才知道是因为我在加"http"协议的时候加的有问题,我直接复制了sonar页面上的url,修改"SONAR_HOST_URL"的同时,也修改了"Server URL",复制的时候多了端口后的斜杠。
最终解决办法就是把"http://192.168.19.200:9000/“改成"http://192.168.19.200:9000”。

成功的结果

经过这些问题的处理后,终于用跑成功了一个集成了sonar的基础pipeline,jenkins运行结果如下:

sonar页面结果如下:

sonar搭建以及jenkins集成sonar(代码片段)

sonar架构图Requirements具体需求Youcansetthemdynamicallyforthecurrentsessionbyrunningthefollowingcommandsasroot:我偷懒,将下面内容添加到了/etc/bashrcsysctl-wvm.max_map_count=262144sysctl-wfs.file-max=65536ulimit-n65536uli 查看详情

阿里云centos安装sonar问题记录(代码片段)

前言最近在阿里云服务器上重新安装了jenkins,同时打算集成更多的常用的插件,例如sonar。很多年前,我在自己的windows电脑上安装过sonar,不过那个电脑我已经没再用了,这次在阿里云上准备按之前的笔记重... 查看详情

持续集成与自动化部署-jenkins与sonargitlab集成(代码片段)

1将jenkins和sonar集成1.1安装sonar插件jenkins上安装sonarqubeplugin,如果没有就安装sonarqubescannerforjenkins这个插件。1.2关联sonar插件1.2.1系统设置设置sonar地址系统管理>系统设置>AddSonarQube>sonarqubeservers修改如下:1.2.2全局设置设置sonar... 查看详情

持续集成之代码质量管理———sonar(代码片段)

...分析工具以及持续集成工具。与持续集成工具(如Hudson/Jenkins等)不同,Sonar并不是简单地把不同代码检查结果(例如:FindBugs、PMD等)直接显示在webUI界面上,而是通过不同的插件对这些结果再加工处理,通过量化的方式度量代... 查看详情

持续集成与自动化部署-jenkins&sonar代码质量管理平台部署和基础使用(代码片段)

1jenkins安装参考链接1.1安装jenkins[[email protected]~]#yuminstall-yjava-1.8.0[[email protected]~]#cd/etc/yum.repos.d/[[email protected]yum.repos.d]#wgethttp://pkg.jenkins.io/redhat/jenkins.repo 查看详情

jenkins与sonar

...史记录使用统一的依赖包管理库每天至少集成一次什么是jenkins持续集成、自动测试、持续部署的超级引擎,支持自定义工具集、多种交付通道jenkins安装安装依赖yuminstalljava-1.8.0-openjdkjava-1.8.0-openjdk-devel安装yum源wget-O/etc/yum.repos.d/j... 查看详情

sonar集成jenkins进行代码审查

...具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。 查看详情

jenkins集成sonar代码质量扫描

Jenkins上安装插件在jenkins插件安装界面安装:插件名SonarQubeScannerforJenkinsJenkins上配置jenkins中操作:系统管理-系统设置,找到SonarQubeservers部分,填写如下jenkins中操作:系统管理-全局工具配置找到SonarQubeScanner部分,填写如下选择... 查看详情

持续集成之代码质量管理sonar(代码片段)

...工具,以及持续集成工具。与持续集成工具(例如Hudson/Jenkins等)不同,Sonar并不是简单地把不同的代码检查工具结果(例如FindBugs,PMD等)直接显示在Web页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式... 查看详情

持续集成之②:整合jenkins与代码质量管理平台sonar并实现构建失败邮件通知

持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知一:Sonar是什么?Sonar是一个用于代码质量管理的开放平台,通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集... 查看详情

阿里云centos安装sonar问题记录(代码片段)

前言最近在阿里云服务器上重新安装了jenkins,同时打算集成更多的常用的插件,例如sonar。很多年前,我在自己的windows电脑上安装过sonar,不过那个电脑我已经没再用了,这次在阿里云上准备按之前的笔记重... 查看详情

jenkins和sonar集成

 Jenkins可以通过插件的形式和Sonar很好的集成。  (1)Jenkin安装Sonar插件(这里我估计安装的插件有点多)        注意:之前安装Jenkins的时候我用的是JDK系统环境环境变量jdk1.7,在安装sonar插件的时候会出现JDK版本过低... 查看详情

sonarqubejenkins集成sonar(代码片段)

...5.6.1/extensions/plugins下,重启sonarqube服务(./sonar.shrestart)jenkins安装好之后,选中某个环境的项目:Analysisproperties中的值:sonar.projectKey=dev-tms-adminsonar.projectName=dev-tms-adminsonar.projectVersion=1.0-SNAPSHOTsonar.sources=srcsonar.java.binaries... 查看详情

持续集成:jenkins部署(代码片段)

Jenkins什么是JenkinsJenkins是一个开源的使用Java开发的持续集成工具,提供了软件开发的持续集成服务,它把开发工作和运维工作结合在一起。它可以把Sonar代码质量检测工具、Maven或者Ant编译打包工具、Github、Gitlab代码管理工具以... 查看详情

(十三)devops持续集成开发——jenkins流水线发布一个sonarqube质量检查项目(代码片段)

前言在前面的内容中我们已经介绍过如何在jenkins中集成质量检查工具sonarqube,以及sonarqube服务的安装。本节内容我们通过使用jenkins构建一个包含sonarqube质量检查的流水线项目,从而实现项目部署发布上线前的代码质量检... 查看详情

jenkins+docker+springcloud微服务持续集成(中)(代码片段)

Jenkins+Docker+SpringCloud微服务持续集成(中)微服务持续集成提交到SonarQube代码审查在Jenkins的项目中添加一个参数在每个微服务的根目录中添加sonar-project.properties文件修改Jenkins构建脚本编译打包微服务工程使用Docker... 查看详情

jenkins集成openshift容器中进行代码扫描(代码片段)

...e:(基础slave镜像参考上篇博文)FROMregistry.it.com/openshift/jenkins-slave:latest#toolmavenADDapache-maven-3.5.0.tar.gz/usr/local/#toolsonarADDsonar-scanner.tar.gz/usr/local/ 2.Jenkinsfiledeflabel="mypod-$UUID.randomUUID().toString()"//代码扫描defSonarScan(projectType,skipSona... 查看详情

使用jenkins实现持续集成(代码片段)

一、jenkins介绍 它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预,有利于减少重复过程以节省时间、费用和工作量;它需要有专门的集成... 查看详情