赞
踩
本文以SonarQube 10.1版本为例,其余版本可以查看官方文档。
①Java:SonarQube 服务器需要 Java 版本 17,SonarQube 扫描仪需要 Java 版本 11 或 17。
Java | Server | Scanner |
Oracle JRE 17 | 支持 | 支持 |
Oracle JRE 11 | 不支持 | 支持 |
OpenJDK 17 | 支持 | 支持 |
OpenJDK 11 | 支持 | 支持 |
②数据库
数据库 | Server |
PostgreSQL 15 | 支持 |
PostgreSQL 14 | 支持 |
PostgreSQL 13 | 支持 |
PostgreSQL 12 | 支持 |
PostgreSQL 11 | 支持 |
PostgreSQL | 必须配置UTF-8字符集 |
Microsoft SQL Server | 支持, 2022 (MSSQL 16.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server | 支持, 2019 (MSSQL Server 15.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server | 支持, 2016 (MSSQL Server 13.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server | 支持, 2014 (MSSQL Server 12.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server | 排序规则必须区分大小写 (CS) 和区分重音 (AS)(示例:Latin1_General_CS_AS)。 |
Microsoft SQL Server | READ_COMMITTED_SNAPSHOT必须在 SonarQube 数据库上设置,以避免在重负载下出现潜在的死锁。 |
Microsoft SQL Server | 同时支持 Windows 身份验证(“集成安全性”)和 SQL Server 身份验证。有关配置身份验证的说明,请参阅安装服务器中的Microsoft SQL Server 部分。 |
Oracle 21C | 支持 |
Oracle 19C | 支持 |
Oracle XE版本 | 支持 |
Oracle | 必须配置为使用 UTF8 系列字符集(请参阅NLS_CHARACTERSET)。 |
Oracle | 不支持ojdbc14.jar驱动程序。 |
Oracle | 建议使用最新的 Oracle JDBC 驱动程序。 |
Oracle | 仅支持精简模式,不支持 OCI。 |
Oracle | 仅支持参数MAX_STRING_SIZE=STANDARD(最大长度为4000字节),不支持EXTENDED (最大长度为32767字节)。 |
③浏览器:要获得SonarQube提供的完整体验,您必须在浏览器中启用JavaScript。
浏览器 | 支持版本 |
Microsoft Edge | 支持,Latest |
Mozilla Firefox | 支持,Latest |
Google Chrome | 支持,Latest |
Safari | 支持,Latest |
④平台参数配置
如果是在Linux上运行:
可以使用以下命令查看上述参数的值:
- sysctl vm.max_map_count
- sysctl fs.file-max
- ulimit -n
- ulimit -u
可以通过root用户按照以下命令为当前会话动态设置上述参数的值:
- sysctl -w vm.max_map_count=524288
- sysctl -w fs.file-max=131072
- ulimit -n 131072
- ulimit -u 8192
如果要永久地设置上述参数,必须更新/etc/sysctl.d/99-sonarqube.conf(或者根据需要更新/etc/sysctl.conf)。
如果运行SonarQube(本例中为SonarQube)的用户没有权限打开至少131072个描述符,则必须在/etc/security/limits.d/99-sonarqube.conf(或/etc/security/limits.conf)中插入这一行:
- sonarqube - nofile 131072
- sonarqube - nproc 8192
如果使用systemd来启动SonarQube,必须在单元文件[Service]部分中指定这些限制:
- [Service]
- ...
- LimitNOFILE=131072
- LimitNPROC=8192
- ...
⑤seccopm过滤器
默认情况下,Elasticsearch 使用seccopm过滤器。确保使用启用了 seccomp 的内核。
检查seccomp在内核上是否可用,请使用:
$ grep SECCOMP /boot/config-$(uname -r)
如果内核具有seccomp,可以看到以下内容:
- CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
- CONFIG_SECCOMP_FILTER=y
- CONFIG_SECCOMP=y
①最低要求
②企业级硬件要求
对于大型团队或SonarQube的企业级安装,需要额外的硬件。在企业级,监控SonarQube实例至关重要,并且应该随着实例的增长进一步的硬件升级。起始配置应至少包括:
docker pull postgres:版本号
mkdir -p /home/apps/postgres/{postgresql,data}
- docker run -d --name postgres -p 5432:5432 \
- -v /home/apps/postgres/postgresql:/var/lib/postgresql \
- -v /home/apps/postgres/data:/var/lib/postgresql/data \
- -v /etc/localtime:/etc/localtime:ro \
- -e POSTGRES_USER=your_user\
- -e POSTGRES_PASSWORD=your_password\
- -e POSTGRES_DB=your_db\
- -e TZ=Asia/Shanghai \
- --restart always \
- --privileged=true \
- postgres:版本号
等待一段时间,直到容器启动并运行 PostgreSQL。使用以下命令检查容器状态:
docker ps
使用任何客户端连接到 PostgreSQL。只需使用以下详细信息:
Host: ip
Port: 5432
Username: your_user
Password: your_password
设置自定义模式而不是默认的“public”模式,则必须设置search_path 属性:
ALTER USER mySonarUser SET search_path to mySonarQubeSchema
备注:版本 12.1.0.1 和 12.1.0.2 有重大错误,不建议与 SonarQube 一起使用。
以下安装的是社区免费的最新版
- # 社区版
- docker pull sonarqube:community
- # 开发版
- docker pull sonarqube:developer
- # 企业版
- docker pull sonarqube:enterprise
因为SonarQube内置了ElasticSearch,不修改启动会报错:ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log
- vim /etc/sysctl.conf
-
- # 增加以下配置
- vm.max_map_count=262144
- fs.file-max=65536
-
- # 使配置生效
- sysctl -p
- # 社区版
- docker run -d --name sonarqube_community --restart always \
- -p 9000:9000 \
- -e SONAR_JDBC_URL=jdbc:postgresql://ip:5432/postgres?currentSchema=your_schema \
- -e SONAR_JDBC_USERNAME=your_user \
- -e SONAR_JDBC_PASSWORD=your_password \
- -v sonarqube_data:/opt/sonarqube/data \
- -v sonarqube_extensions:/opt/sonarqube/extensions \
- -v sonarqube_logs:/opt/sonarqube/logs \
- sonarqube:community
-
- # 开发版本
- docker volume create --name sonarqube_data_dev
- docker volume create --name sonarqube_logs_dev
- docker volume create --name sonarqube_extensions_dev
- docker run -d --name sonarqube_developer --restart always \
- -p 9000:9000 \
- -e SONAR_JDBC_URL=jdbc:postgresql://ip:5432/postgres?currentSchema=your_schema \
- -e SONAR_JDBC_USERNAME=your_user \
- -e SONAR_JDBC_PASSWORD=your_password \
- -v sonarqube_data_dev:/opt/sonarqube/data \
- -v sonarqube_extensions_dev:/opt/sonarqube/extensions \
- -v sonarqube_logs_dev:/opt/sonarqube/logs \
- sonarqube:developer
-
- # 企业版
- docker volume create --name sonarqube_data_enterprise
- docker volume create --name sonarqube_logs_enterprise
- docker volume create --name sonarqube_extensions_enterprise
- docker run -d --name sonarqube_enterprise --restart always \
- -p 9000:9000 \
- -e SONAR_JDBC_URL=jdbc:postgresql://ip:5432/postgres?currentSchema=your_schema \
- -e SONAR_JDBC_USERNAME=your_user \
- -e SONAR_JDBC_PASSWORD=your_password \
- -v sonarqube_data_enterprise:/opt/sonarqube/data \
- -v sonarqube_extensions_enterprise:/opt/sonarqube/extensions \
- -v sonarqube_logs_enterprise:/opt/sonarqube/logs \
- sonarqube:enterprise
可以在启动命令中指定数据库连接,也可以编辑 <SONARQUBE_HOME>/conf/sonar.properties 以配置数据库设置。每个支持的数据库都可以使用模板。只需取消注释并配置您需要的模板,并注释掉专用于 H2 的行:
详细步骤如下:
①使用以下命令进入正在运行的Docker容器:
docker exec -it <container_name> bash
②在容器中,找到/opt/sonarqube/conf/sonar.properties文件,并使用文本编辑器(如vi或nano)打开它,添加相关数据库的配置。
③重启SonarQube容器
docker restart <container_name>
④验证是否配置成功
登陆对应数据库查看相关表是否创建成功,以PostgreSQL为例:
- firewall-cmd --add-port=9000/tcp --permanent
- firewall-cmd --reload
docker logs sonarqube
http://ip:9000,默认账号:admin,初始密码:admin
第一次登陆需要修改密码。
SonarScanner一般是部署在需要扫描代码的机器。
docker pull sonarsource/sonar-scanner-cli:4.8.0
可以到docker官网获取SonarScanner对应版本拉取命令。
下载完成后,使用以下命令来启动SonarScanner容器:
docker run -ti --rm -v /path/to/your/code:/usr/src sonarsource/sonar-scanner-cli
其中,/path/to/your/code是您要扫描的代码所在的本地目录的路径。
①在容器中配置SonarScanner
- docker run -ti --rm -v /path/to/your/code:/usr/src sonarsource/sonar-scanner-cli sonar-scanner \
- -Dsonar.projectKey=your_project_key \
- -Dsonar.sources=. \
- -Dsonar.host.url=http://your_sonarqube_server:9000 \
- -Dsonar.login=your_sonarqube_token
在上面的命令中,您需要将以下参数替换为实际值:
- your_project_key:您的项目的唯一键
- your_sonarqube_server:您的SonarQube服务器的URL
- your_sonarqube_token:您的SonarQube服务器的访问令牌
②也可以在项目根目录下创建sonar-project.properties文件指定相关参数
配置文件参数解释:
sonar.projectKey=项目key,在SonarQube新建页面时获取
sonar.projectName=项目名称
sonar.projectVersion=项目版本
sonar.sources=源码地址,例如:src
sonar.java.binaries=二进制代码地址,例如:./target/classes
sonar.branch.name=代码分支,例如:master
sonar.sourceEncoding=源码编码格式,UTF-8
sonar.host.url=SonarQube地址,http://127.0.0.1:9000
sonar.login=SonarQube登陆账号,也可以使用sonar.token替换,token在SonarQube创建项目时获取
sonar.password=SonarQube登陆密码,也可以使用sonar.token替换,token在SonarQube创建项目时获取
sonar.language=指定扫描的语言,选填,例如:Java
备注:如果部署在其他平台需要配置环境变量指定到SonarScanner的bin目录。
使用sonar-scanner -v命令验证是否部署成功。
可以在IDE端通过SonarLint连接SonarQube,即可同步SonarQube扫描出来的问题,自定义规则问题也可以同步展示到IDE工具上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。