SonarQube&Gitlab-CI 实现静态代码分析

2019-08-29 16:32:49 浏览数 (1)

一. 背景介绍

SonarQube® is an automatic code review tool to detect bugs, vulnerabilities and code smells in your code.

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理工具之一。SonarQube支持25 语言,可以跟CI/CD集成。

二. SonarQube平台搭建 1. 使用docker拉取镜像

代码语言:javascript复制
docker pull postgres //拉取数据库
docker pull sonarqube //拉取sonarqube

2. 启动服务

代码语言:javascript复制
docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres //启动数据库
docker run -d --name sonarqube -p 9000:9000 -e sonar.jdbc.username=sonar -e sonar.jdbc.password=sonar -e sonar.jdbc.url=jdbc:postgresql://localhost/sonar sonarqube //启动sonarqube

如果需要特殊的配置可以选择绑定挂载卷,命令如下

代码语言:javascript复制
docker run -d --name sonarqube -p 9000:9000 -v /path/to/conf:/opt/sonarqube/conf -v /path/to/data:/opt/sonarqube/data -v /path/to/logs:/opt/sonarqube/logs -v /path/to/extensions:/opt/sonarqube/extensions sonarqube

3. 访问SonarQube 本地搭建的访问: https://localhost:9000 账号:admin,密码:admin

三. GitLab-CI&GitLab-Runner

在我们的项目中使用GitLab进行源码控制,GitLab-CI就是一套配合GitLab使用的持续集成系统。GitLab-Runner是配合GitLab-CI进行使用的。在gitlab中每个project都会配置ci的脚本。也就是当有develop pull了代码到repo,gitlab会通知gitlab-ci,gitlab-ci又会通知到相对应的Runner,这时候Runner会去执行相对应的script。 gitlab runner 可以配置多个,在不同的机器上也可以在同一个机器配置多个runner.

gitlab-runner安装:https://docs.gitlab.com/runner/install/linux-repository.html

四. Gradle项目配置

build.gradle配置

代码语言:javascript复制
plugins {
  id "org.sonarqube" version "2.7"
}
subprojects {
  apply plugin: "org.sonarqube"
  sonarqube {
    properties {
      property "java-module.sonar.sources", "."
      property "sonar.java.binaries", "/bin"
      property "sonar.sourceEncoding", "UTF-8"
      property "java-module.sonar.tests", "."    
      }
   }
}
sonarqube {
  properties {
    property "sonar.host.url", "https://****"
    property "sonar.verbose", "true"
    property "sonar.login", ""
    property "sonar.sourceEncoding", "UTF-8"  
    property "sonar.modules", "java-module"
    property "sonar.projectKey", "int"
    property "sonar.projectName", "Int*"
  }
}

本地执行命令: gradle sonar 与CI集成,.gitlab-ci.yml配置

代码语言:javascript复制
sonarqube:
  stage: sonarqube
  tags:
    - shell
  only:
    - develop
   - /^release.*$/
  script:
    - ./gradlew sonarqube -Dsonar.branch.name=${CI_COMMIT_REF_NAME} -x test 

五.结果展示

0 人点赞