Jenkins代码检查--持续代码质量检测

2021-06-04 18:05:30 浏览数 (1)

三.持续代码质量检测

SonarQube是一个代码质量管理工 具,能对20多种编程语言源码进行代码味道( Code Smells)、Bug、 安全漏洞方面的静态分析。SonarQube有4个版本:开源版、开发者版、企业版、数据中心版( Data Center Edition)。

详细的区别,可前往官方网站进行了解,本篇使用的是开源版6.7.5LTS,假设读者已经安装此版本。

Maven与SonarQube集成

为方便起见,我们就不自己写例子了而是直接使用JUnit 4源码来做示例。将JUnit 4从GitHub克隆下来后,在pom.xml中加入SonarQube插件依赖。

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org . codehaus . mojo</ groupId>
  5. <artifactId>sonar-maven-plugin</artifactId>
  6. <version>3.4.1.1168< /version>
  7. </plugin>
  8. </plugins>
  9. </build>

执行命令: mvn clean org.sonarsource.scanner.maven

3.4.1.1168:sonar -Dsonar.host.url=http://127.0.0.1:9000

sonar.host.url参数用于指定SonarQube服务的地址。这时,就可以在SonarQube的”Projects” 中看到JUnit 4的分析结果,可以看到JUnit 4有11个Bug。

SonarQube服务默认允许任何人执行源码分析,因此在生产环境中使用会有安全隐患,以下几步可以提高其安全性: 1.设置SonarQube禁此非登录用户使用

2.为用户生成Token,Jenkins只能通过Token与SonarQube集成。登陆SonarQube,进入个人设置页面中的Security tab页

3.在执行mvn命令时加入相应的sonar.login参数 mvn clean package org.sonarsource.scanner.maven:sonar-maven- plugin:3.4.1.1168:sonar -Dsonar.host.url=http://192.168.1.8:9000 -Dsonar.login=e2f92b48d047be825fe3c2c06dec818788855a3e

Jenkins与SonarQube集成

将Maven与SonarQube集成,这时SonarQube对于Jenkins来说还是透明的,Jenkins并不知道代码质量如何。将集成Jenkins与SonarQube ,以实现当代码质量不合格时, Jenkins pipeline失败。

具体步骤如下: 1.Jenkins安装SonarQube Scanner插件

2.Jenkins配置SonarQube Scanner插件

3.SonarQube设置Webhooks,不同代码规模的源码,分析过程的耗时是不一样的。所以当分析完成时,由SonarQube主动通知Jenkins。设置方法就是进入SonarQube的Adminstration -》Configuration -》 Webhooks页 ,加入http://jenkins地址/sonarqube-webhook 这个接口地址由SonarQube插件提供

4.在Jenkinsfile中加入SonarQube的stage

  1. pipeline {
  2. angent any
  3. tools {
  4. maven ' mvn- -3.5.4
  5. }
  6. stages {
  7. stage( 'Code Analysis') {
  8. steps {
  9. withSonarQubeEnv(' sonarqube') {
  10. sh """
  11. mvn clean package org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar
  12. -Dsonar.host.url=${SONAR_ HOST_ URL}
  13. -Dsonar.login=${ SONAR_ AUTH_ TOKEN}
  14. """
  15. }
  16. }
  17. }
  18. stage("Quality Gate" ) {
  19. steps {
  20. timeout(time: 1, unit: 'HOURS') {
  21. waitForQualityGate abortPipeline: true
  22. }
  23. }
  24. }
  25. }
  26. }

withSonarQubeEnv是一个环境变量包装器,读取的是我们所配置的变量。在它的闭包内,我们可以使用以下变量。

  • SONAR_HOST_URL : SonarQube服务的地址
  • SONAR_AUTH_TOKEN : SonarQube认证所需要的Token

waitForQualityGate步骤告诉Jenkins等待SonarQube返回的分析结果。当它的abortPipeline参数为true时,代表当质量不合格,将pipeline的状态设置为UNSTABLE。

我们同时使用了timeout包装器来设置waitForQualityGate步骤的超时时间,避免当网络出问题时, Jenkins任务-直处于等待状态。

5.设置Quality Gates(质量阈值)。 在SonarQube的”Quality Gates”下,我们可以看到系统自带的质量阈值,如图所示。可以看出它是针对新代码的。所以,在初次及没有新代码加入的情况下,执行代码分析是不会报出构建失败的。

0 人点赞