文章目录
1、环境准备
- 查询linux的值:
[root@aa ~]# sysctl vm.max_map_count
vm.max_map_count = 524288
[root@aa ~]# sysctl fs.file-max
fs.file-max = 1608722
[root@aa ~]# ulimit -n
131072
[root@aa ~]# ulimit -u
63407
- 设置linxu的值满足以下要求:
vm.max_map_count 大于或等于524288
fs.file-max 大于或等于131072
运行SonarQube的用户可以打开至少131072个文件描述符
运行SonarQube的用户可以打开至少8192个线程
设置方法为:
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
2、使用compose集群部署 sonarqueb
- linux 安装 docker\docker-compose,参考 docker学习总结2
- 编写 docker-compose-sonarqube.yml
version: '3'
services:
postgres:
image: postgres
restart: always
container_name: sonarqube_postgres
ports:
- 5432:5432
volumes:
- ./postgresql/:/var/lib/postgresql
- ./datasql/:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
networks:
- sonar-network
sonar:
image: sonarqube
restart: always
container_name: sonarqube
depends_on:
- postgres
volumes:
- ./extensions:/opt/sonarqube/extensions
- ./logs:/opt/sonarqube/logs
- ./data:/opt/sonarqube/data
- ./conf:/opt/sonarqube/conf
ports:
- 9000:9000
environment:
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
networks:
- sonar-network
networks:
sonar-network:
driver: bridge
- mkdir目录后,touch 文件 docker-compose-sonarqube.yml,将内容复制进去
- 在该目录下执行:docker-compose up -d
- 进入web界面:http://10.240.3.253:9000,初始密码:admin/admin
- 配置中文插件,当前版本有bug,配置不了
3、与jenkins的持续集成配置
3.1 linux配置最新jdk11
原因:jdk8后面运行会报错, 解决办法:更新服务器上的jdk为最新版本,参考链接:https://stackoverflow.com/questions/37686144/java-lang-unsupportedclassversionerror-org-sonar-batch-bootstrapper-environment
jdk8 执行时候会报错:java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
- 卸载原有的jdk
查看已安装的jdk: yum list installed | grep java
卸载所有的jdk: yum -y remove java-1.7.0-openjdk*
- 安装新的jdk
查看当前所有的jdk版本: yum -y list java*
下载jdk11: yum install -y java-11-openjdk.x86_64
验证: java -version
3.2 jenkins 上配置 sonarqube 插件
- 插件管理中安装:
Sonar Quality Gates Plugin
SonarQube Scanner for Jenkins
- 全局工具配置:
3.3 jenkins 上配置 sonarscaner 插件
系统配置中添加 SonarQube servers 的配置
- Name 输入: SonarQube
- Server URL 输入: http://ip:9000
- Server authentication token 中选择:Secret text
- 点击添加按钮,在弹框中选择 secret text 类型,输入secret密码信息,值来自于http://ip:9000 网站,如下:
4、扫描指定分支的代码
参考链接:https://www.cnblogs.com/cjsblog/p/10740840.html
- 在jenkins系统管理 > 系统配置 > sonarqube servers层级下:勾选 Environment variables
- 新建自由风格的任务,任务名:demo_sonar_001
- 源码管理:配置git任务,参考 git总结
(1)输入开发那边不同git仓库的ssh地址、密钥、分支名
(2)配置密钥:复制id.rsa文件里面的内容到jenkins上即可,路径一般在:C:\Users\tfjiao.ssh
- 构建环境:勾选 Pre sonarqube scanner ,不输入密钥,因为系统全局变量已经配置过了
- 构建: 增加构建步骤 > execute sonarqube scanner > Analysis properties中输入
sonar.projectKey=demo001
sonar.projectName=demo001
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
sonar.projectKey=demo001 # 唯一性,不能跟其他项目重名
sonar.projectName=demo001 # sonarqube界面显示的项目名
sonar.projectVersion=1.0 # 项目版本
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE # 需要检测的目录
sonar.java.binaries=$WORKSPACE
不常用的配置:
sonar.projectKey=demo001 #sonar平台中相对应项目的key
sonar.projectName=demo001 #sonar平台中相对应项目的名字
sonar.sources=. #sonar检测的源文件目录,‘.’表示当前根目录下的所有文件目录;包含主要源文件的目录的逗号分隔路径
sonar.exclusions=**/*_test.go,**/vendor/** #检测中排除的源文件(排除的源文件不参与检测,一般排除单元测试文件、配置文件等)
sonar.tests=. #sonar检测的测试文件目录,‘.’表示当前根目录下的所有文件目录;包含测试源文件的目录的逗号分隔路径。从构建系统中读取Maven,Gradle,MSBuild项目。否则默认为空。
sonar.test.inclusions=**/**_test.go #检测中的测试源文件(指定单元测试文件)
sonar.test.exclusions=**/vendor/** #检测中排除的测试源文件(排除的源文件不参与检测)
- 运行任务,sonarqube会自动创建项目
5、问题汇总
- 配置git仓库时候,一直提示无法连接仓库,密钥也没问题,
排查发现其他项目的任务都失败了,根因是jdk调用时候报错了
解决办法:1、删掉了全局配置里面的jdk,因为我没有配用户名,jenkins默认优先调用jenkins配置的jdk,干掉后,就会调用服务器我配置的jdk11,问题解决
- 报错;ERROR: Couldn’t find any revision to build. Verify the repository and branch configuration for this job.
ERROR: Couldn’t find any revision to build. Verify the repository and branch configuration for this job.
根因:配置git任务时分支名多了个空格
- 启动pt容器老失败?
报错:initdb: error: directory “/var/lib/postgresql/data” exists but is not empty
If you want to create a new database system, either remove or empty
the directory “/var/lib/postgresql/data” or run initdb
with an argument other than “/var/lib/postgresql/data”.
The files belonging to this database system will be owned by user “postgres”.
This user must also own the server process.
解决办法:去掉pg数据库容器的数据卷
- 启动sonarqube容器失败?
2021.12.07 12:53:22 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://192.168.10.120:5432/sonar
2021.12.07 12:53:32 ERROR web[][o.s.s.p.PlatformImpl] Web server startup failed
服务启动失败
解决办法:更新ip,忘了改ip了