CentOS7安装Docker版本Sonarqube7

CentOS7安装Docker版本Sonarqube7

由于想重新体验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

配置SonarQube Token

生成token

生成token

7.Jenkins配置凭据

7.1 安装插件

插件名:SonarQube Scanner

7.2 配置sonar

1.点击Manage Jenkins-Configure System

配置服务信息

2.添加凭证

添加凭证

3.选择凭证

选择凭证

7.3 项目配置

项目配置1

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

项目配置2

运行项目,就可以看到 控制台输出

项目配置3


本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!

欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。

公众号二维码

updatedupdated2022-09-212022-09-21