SonarQube 之前的名称 Sonar(声纳),是一个 Java 语言实现的开源代码质量管理系统,专门用于持续集成分析和测量代码的质量。如果你希望扩展 SonarQube 平台可以通过开源的插件来实现,或者也可以自己开发插件然后集成到 SonarQube 中。如果你还没用过 SonarQube 系统,接下来跟着我来安装和使用 SonarQube 系统吧。

我们依旧还是采用 Docker 容器来运行我们的 SonarQube 系统,SonarQube 默认采用内嵌数据库 H2,可用于测试研究,如果是正式使用的话还是采用生产环境级别的数据库,例如 PostgreSQL、Microsoft SQL Server 或者 Oracle 数据库,需要注意的是目前新版的 SonarQube 不支持使用 MySQL 数据库了,如果你确实想使用 MySQL 作为数据库,那你就得使用 6.7 - 7.8 版本的 SonarQube。至于新版的 SonarQube 为什么再不支持 MySQL,各位同学可以参加如下链接的说明 https://community.sonarsource.com/t/end-of-life-of-mysql-support/8667

我这里采用的是版本较新的 SonarQube 8.9.0 和 PostgreSQL 13.3,docker-compose.yml 内容如下:

version: "3.7"

services:
  sonarqube-in-docker:
    image: sonarqube:8.9.0-community
    container_name: sonarqube-in-docker
    restart: on-failure:3
    ports:
      - 9000:9000
    volumes:
      - ./docker_data/sonarqube_data:/opt/sonarqube/data
      - ./docker_data/sonarqube_extensions:/opt/sonarqube/extensions
      - ./docker_data/sonarqube_logs:/opt/sonarqube/logs
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://postgres-in-docker:5432/sonarqube
      SONAR_JDBC_USERNAME: admin
      SONAR_JDBC_PASSWORD: adminPwd
    networks:
      - jenkins_network

  postgres-in-docker:
    image: postgres:13.3
    container_name: postgres-in-docker
    restart: on-failure:3
    ports:
      - 5432:5432
    volumes:
      - ./docker_data/postgresql_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: sonarqube
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: adminPwd
    networks:
      - jenkins_network

networks:
  jenkins_network:

另外需要注意的是 SonarQube 对系统性能有一定的要求,要确保满足如下的配置要求:

  • vm.max_map_count 的值要大于等于 524288
  • fs.file-max 的值要大于等于 131072
  • 运行 SonarQube 的用户可以至少打开 131072 个文件描述符
  • 运行 SonarQube 的用户至少可以打开 8192 个线程

如果不知道以上配置的具体情况可以分别执行如下命令查看:

sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u

如果不满足要求可以用管理员权限执行下面的命令进行调整,如果你想知道 SonarQube 的其他安装要求,可以参见官方文档说明 https://docs.sonarqube.org/latest/requirements/requirements/

sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

然后去到和 docker-compose.yml 文件同目录的地方执行如下命令启动 SonarQube 和 PostgreSQL:

# 启动容器
docker-compose up -d

# 查看容器的运行日志
docker logs -f container_name

等待 SonarQube 启动完成后,就可以用 IP 和 9000 端口访问 SonarQube 服务了。例如我的是 http://192.168.31.200:9000,需要登录,默认的管理员账号和密码都是 admin:

sonarqube 增加JAVA版本 sonarqube安装教程_运维

新版的 SonarQube 初次安装后需要重置默认密码以保证账号安全:

sonarqube 增加JAVA版本 sonarqube安装教程_linux_02

登录进去后默认就在这个管理面板,我这里还没安装中文语言库,所以是英文界面:

sonarqube 增加JAVA版本 sonarqube安装教程_docker_03

接下来我们安装中文语言库,根据如图的步骤进入到应用市场下载中文语言库插件,注意安装插件之前要先同意授权协议。

sonarqube 增加JAVA版本 sonarqube安装教程_docker_04

插件安装好后需要重启下 SonarQube 系统,如果你还想用其他插件,自己在应用市场搜索你想要的插件:

sonarqube 增加JAVA版本 sonarqube安装教程_linux_05

如果由于网络原因导致插件下载失败,可以自行在 GitHub 去下载中文语言库插件的 jar 包,然后放到 SonarQube 安装目录下的 plugins 目录中。然后重启 SonarQube 系统,后期如果自己开发了 SonarQube 插件,也是将 jar 包放在 plugins 目录中。

重启好后再次进入到系统,我们的 SonarQube 界面就是中文的了:

sonarqube 增加JAVA版本 sonarqube安装教程_服务器_06

我们的 SonarQube 系统搭建到这里就已经完成了。如果你在实际操作中遇到什么问题,欢迎留言讨论。