由于想重新体验Sonar开源代码质量管理平台,为了方便快速使用,于是使用Docker方式部署。
1.简介
sonarqube是一个开源代码质量管理平台,可通过安装不同的插件sonar可以集成测试工具、代码质量分析工具、持续集成等多种功能。sonarqube架构主要由:sonarqube服务器
、sonar数据库
、插件
、sonarqube scanners
四部分组成。
由于支持JDK1.8
的最后一个版本是7.8-community
,为了避免改动项目代码,我这里没有使用最新
社区版。
这里说明下,由于去年11月份爆出Sonar Api漏洞,为保证安全,请在内网搭建,不要暴露公网端口,可以进行防火墙等安全规则限制。
2.配置docker-compose 配置文件
操作系统已经提前安装了Docker Compose,所以这里就直接配置docker-compose 配置文件
version: '3'
services:
postgres:
image: postgres:14.5
restart: always
container_name: postgres
ports:
- 30003:5432
volumes:
- /docker/sonar7/postgres/postgresql:/opt/sonarqube/postgresql
- /docker/sonar7/postgres/data:/opt/sonarqube/postgresql/data
- /etc/localtime:/etc/localtime:ro
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
sonar:
image: sonarqube:7.8-community
container_name: sonar
depends_on:
- postgres
volumes:
#- /docker/sonar7/sonarqube/extensions:/opt/sonarqube/extensions
- /docker/sonar7/sonarqube/logs:/opt/sonarqube/logs
- /docker/sonar7/sonarqube/data:/opt/sonarqube/data
- /docker/sonar7/sonarqube/conf:/opt/sonarqube/conf
# 设置与宿主机时间同步
- /etc/localtime:/etc/localtime:ro
ports:
- 30004:9000
command:
# 内存设置
- -Dsonar.ce.javaOpts=-Xmx2048m
- -Dsonar.web.javaOpts=-Xmx2048m
# 设置服务代理路径
- -Dsonar.web.context=/
# 此设置用于集成gitlab时,回调地址设置
- -Dsonar.core.serverBaseURL=http://10.3.3.10:30004
environment:
TZ: Asia/Shanghai
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
这里还是得说明下一些配置项
- 主机和容器里的目录
/docker/sonar7/postgres/postgresql是主机的目录
/opt/sonarqube/postgresql 是容器里的存放目录
- 回调地址,写你主机的IP(这里是之前9.X版本部署配置的,这里还没试验)
Dsonar.core.serverBaseURL=http://10.3.3.10:30004
- 宿主机映射路径`/docker/sonar7/sonarqube/conf执行如下操作
# touch sonar.properties
新增wrapper.conf
配置文件
# vim wrapper.conf
# Path to JVM executable. By default it must be available in PATH.
# Can be an absolute path, for example:
#wrapper.java.command=/path/to/my/jdk/bin/java
wrapper.java.command=java
#
# DO NOT EDIT THE FOLLOWING SECTIONS
#
#********************************************************************
# Wrapper Java
#********************************************************************
wrapper.java.additional.1=-Dsonar.wrapped=true
wrapper.java.additional.2=-Djava.awt.headless=true
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.java.classpath.1=../../lib/jsw/*.jar
wrapper.java.classpath.2=../../lib/common/*.jar
wrapper.java.classpath.3=../../lib/*.jar
wrapper.java.library.path.1=./lib
wrapper.app.parameter.1=org.sonar.application.App
wrapper.java.initmemory=8
wrapper.java.maxmemory=32
#********************************************************************
# Wrapper Logs
#********************************************************************
wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=../../logs/sonar.log
wrapper.logfile.format=M
wrapper.logfile.loglevel=INFO
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
#wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
#wrapper.logfile.maxfiles=0
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper Windows Properties
#********************************************************************
# Title to use when running as a console
wrapper.console.title=SonarQube
# Disallow start of multiple instances of an application at the same time on Windows
wrapper.single_invocation=true
#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section. The
# service can then be reinstalled.
# Name of the service
wrapper.ntservice.name=SonarQube
# Display name of the service
wrapper.ntservice.displayname=SonarQube
# Description of the service
wrapper.ntservice.description=SonarQube
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed. AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false
#********************************************************************
# Forking Properties
#********************************************************************
wrapper.disable_restarts=TRUE
wrapper.ping.timeout=0
wrapper.shutdown.timeout=0
wrapper.jvm_exit.timeout=0
[root@centos8-10 conf]# cat wrapper.conf
# Path to JVM executable. By default it must be available in PATH.
# Can be an absolute path, for example:
#wrapper.java.command=/path/to/my/jdk/bin/java
wrapper.java.command=java
#
# DO NOT EDIT THE FOLLOWING SECTIONS
#
#********************************************************************
# Wrapper Java
#********************************************************************
wrapper.java.additional.1=-Dsonar.wrapped=true
wrapper.java.additional.2=-Djava.awt.headless=true
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.java.classpath.1=../../lib/jsw/*.jar
wrapper.java.classpath.2=../../lib/common/*.jar
wrapper.java.classpath.3=../../lib/*.jar
wrapper.java.library.path.1=./lib
wrapper.app.parameter.1=org.sonar.application.App
wrapper.java.initmemory=8
wrapper.java.maxmemory=32
#********************************************************************
# Wrapper Logs
#********************************************************************
wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=../../logs/sonar.log
wrapper.logfile.format=M
wrapper.logfile.loglevel=INFO
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
#wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
#wrapper.logfile.maxfiles=0
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper Windows Properties
#********************************************************************
# Title to use when running as a console
wrapper.console.title=SonarQube
# Disallow start of multiple instances of an application at the same time on Windows
wrapper.single_invocation=true
#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section. The
# service can then be reinstalled.
# Name of the service
wrapper.ntservice.name=SonarQube
# Display name of the service
wrapper.ntservice.displayname=SonarQube
# Description of the service
wrapper.ntservice.description=SonarQube
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed. AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false
#********************************************************************
# Forking Properties
#********************************************************************
wrapper.disable_restarts=TRUE
wrapper.ping.timeout=0
wrapper.shutdown.timeout=0
wrapper.jvm_exit.timeout=0
- 保证目录权限
# chmod -R 777 /docker
3. 启动容器
# docker-compose up -d
有时候postgres容器启动服务比较慢,可能导致sonar无法连接数据库。
# docker stop sonar
# docker start sonar
4.验证
上面的sonar端口对外是30004端口,请注意相关防火墙规则得放行。
- 访问web地址:
http://10.3.3.10:30004
,默认用户名/密码:admin/admin
- 7.8-community需要自己手工进入修改密码页面修改,而9.x的版本会进入修改密码流程。
5.下载汉化包
# cd /docker/sonar7/sonarqube/logs/
# wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.28/sonar-l10n-zh-plugin-1.28.jar
# docker exec -it sonar /bin/bash
# cd /opt/sonarqube/extensions/plugins
# cp /opt/sonarqube/logs/sonar-l10n-zh-plugin-1.28.jar .
重启下服务
# docker stop sonar
# docker start sonar
6.生成token
配置SonarQube Token
生成token
7.Jenkins配置凭据
7.1 安装插件
插件名:SonarQube Scanner
7.2 配置sonar
1.点击Manage Jenkins
-Configure System
2.添加凭证
3.选择凭证
7.3 项目配置
在Analysis properties
里配置信息
sonar.java.source=1.8
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
运行项目,就可以看到 控制台输出
本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!
欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。