单独的jenkins+sonarqube已经在另外一篇讲过了。
那么如果遇到一个流程的时候怎么将sonarqube集成在流水线呢。
例如:拉取代码-检查代码,如果通过质量阀则继续后面的步骤(部署启动删除等操作)
官方文档有个小例子,直接拿过来看看。根据自己的需求进行调整即可。
在实际测试中,sonar的质量阀设置标准根据自己的项目实际来设置,如果没有通过,则jenkins pipline就不会执行下面其他的步骤。
此处sonar执行的是放在项目根目录下的sonar-scanner.properties文件,该文件里就是写的sonar执行的命令,和直接将命令行写到sh后面是一样的。
这里需要注意的就是修改scanner的路径和sonarqube路径(分别在全局工具和系统配置里定义好),检查质量阀状态这个步骤中sleep(8)格外说明一下:
经常会发现pipeline进行到waitForQualityGate的时候卡主了,然后一直等到超时失败。如果是一直都这样,可能是代码问题,但是中间也发现了有成功的,比较了一下其中的日志,能够发现在调用waitForQualityGate的时候,如果状态是成功,
就直接通过了,如果是pending状态,就会一直阻塞。看了文档,这个方法应该是同步的,但是按照实际的测试,
在调用方法的时候会去请求一次sonar结果,如果不是终态,就会阻塞住,然后貌似也没有再次去请求最新的状态,
相当于是sonar jenkins插件的一个bug。
因此想了个粗暴的办法就是在waitForQualityGate之前,先sleep几秒,然后去取状态的时候就能直接取到终态了。
因为在调用waitForQualityGate的时候,sonar扫描已经完成了,所以很快就会有结果产生。