一、安装准备
1、系统要求
最低要求 | |
---|---|
CPU | 支持 64 位的 Intel® 或 AMD 处理器*;2 GHz 或速度更快的处理器 |
内存 | 4 GB 或更大 RAM(推荐使用 8 GB) |
硬盘 | 需要 5GB 以上的可用磁盘空间 |
操作系统 | CentOS 7 或更高版本 |
GitLab是为Unix操作系统开发的。它不能在Windows上运行,官方建议至少使用
4GB
的可用内存来运行GitLab。
2、软件要求
- JDK 11
- SonarQube 安装包
- Sonar-Scanner 安装包
- MySQL 数据库
一、环境设置
1、设置镜像源
因为国外镜像网速较慢,推荐设置阿里云镜像源:https://opsx.alibaba.com/mirror
1.1、备份
[root@gitlab ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
1.2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
[root@gitlab ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
[root@gitlab ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.3、之后运行yum makecache生成缓存
[root@docker]# sudo yum makecache all;
1.4、执行yum update 更新系统组件到最新版本
[root@docker]# sudo yum update -y;
2、配置静态IP
通常在/etc/sysconfig/network-scripts
目录下都会有 ifcfg-eth0
格式文件,修改该文件内容:
[root@gitlab ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
主要修改BOOTPROTO="static"
、ONBOOT="yes"
,并增加 IPADDR
、NETMASK
、GATEWAY
、DNS1
。
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="5b07acd3-b8bf-4a9e-b471-8e6330f2b622"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.150
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
ZONE=public
重启网卡
[root@gitlab ~]# service network restart
3、关闭防火墙
常用命令
[root@gitlab]# systemctl start firewalld 启动
[root@gitlab]# systemctl stop firewalld 关闭
[root@gitlab]# systemctl status firewalld 查看状态
[root@gitlab]# systemctl disable firewalld 开机禁用
[root@gitlab]# systemctl enable firewalld 开机启用
三、服务安装
1、安装JDK
$ sudo yum install -y java-11-openjdk
安装 SonarQube
2、下载安装包
SonarQube 下载:
Sonar-Scanner 下载:
3、SonarQube 安装配置
3.1、解压 sonarqube-{version}.zip 安装包到 /usr/local/sonarqube,比如当前版本是8.0,则解压脚本如下:
$ unzip sonarqube-8.0.zip -d /usr/local/sonarqube
3.2、修改默认配置,设置数据库、Http相关参数
进入sonarqube解压缩之后的文件目录中,进入conf文件下,找到sonar.properties文件,并进行修改
$ cd /usr/local/sonarqube/sonarqube-8.0
$ vi /conf/sonar.properties
3.2.1、添加数据库配置,这里使用了 PostgreSQL
# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=jeebiz_sonarqube
sonar.jdbc.password=SKzHChs6tKNFyJmc
#----- PostgreSQL 9.3 or greater
# By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
sonar.jdbc.url=jdbc:postgresql://192.168.1.103:5432/sonarqube?currentSchema=my_schema
3.2.2、配置Web服务地址、应用名、端口
# Binding IP address. For servers with more than one IP address, this property specifies which
# address will be used for listening on the specified ports.
# By default, ports will be used on all IP addresses associated with the server.
sonar.web.host=192.168.1.103
# Web context. When set, it must start with forward slash (for example /sonarqube).
# The default value is root context (empty value).
sonar.web.context=/
# TCP port for incoming HTTP connections. Default value is 9000.
sonar.web.port=9000
3.2.3、性能调优
默认情况下,SonarQube配置为在具有简单Java JRE的任何计算机上运行。
为了获得更好的性能,安装生产实例时要做的第一件事是使用Java JDK并通过在 $ SONARQUBE-HOME/conf/sonar.properties 中取消注释/设置以下行来激活服务器模式:
sonar.web.javaOpts=-Xmx768m -Xms256m -XX:+HeapDumpOnOutOfMemoryError
3.2.4、自定义JDK目录(可选)
要更改 SonarQube 使用的Java JVM,只需编辑 SONARQUBE-HOME/ conf/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
3.2.5、自定义文件报告存储目录(可选)
有时为了将存储结果保存到其他目录,则需要修改存储目录
#--------------------------------------------------------------------------------------------------
# OTHERS
# Delay in seconds between processing of notification queue. Default is 60 seconds.
#sonar.notifications.delay=60
# Paths to persistent data files (embedded database and search index) and temporary files.
# Can be absolute or relative to installation directory.
# Defaults are respectively <installation home>/data and <installation home>/temp
sonar.path.data=/www/sonarqube/data
sonar.path.temp=/www/sonarqube/temp
# Telemetry - Share anonymous SonarQube statistics
# By sharing anonymous SonarQube statistics, you help us understand how SonarQube is used so we can improve the product to work even better for you.
# We don't collect source code or IP addresses. And we don't share the data with anyone else.
# To see an example of the data shared: login as a global administrator, call the WS api/system/info and check the Statistics field.
#sonar.telemetry.enable=true
执行授权:
$ chmod 777 /www/sonarqube/
$ chown -R elsearch /www/sonarqube/
完整配置内容如下:
# Property values can:
# - reference an environment variable, for example sonar.jdbc.url= ${env:SONAR_JDBC_URL}
# - be encrypted. See https://redirect.sonarsource.com/doc/settings-encryption.html
#--------------------------------------------------------------------------------------------------
# DATABASE
#
# IMPORTANT:
# - The embedded H2 database is used by default. It is recommended for tests but not for
# production use. Supported databases are Oracle, PostgreSQL and Microsoft SQLServer.
# - Changes to database connection URL (sonar.jdbc.url) can affect SonarSource licensed products.
# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=jeebiz_sonarqube
sonar.jdbc.password=SKzHChs6tKNFyJmc
#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092
#----- MySQL
sonar.jdbc.url=jdbc:mysql://47.98.123.43:3306/jeebiz_sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#----- Oracle 11g/12c/18c/19c
# The Oracle JDBC driver must be copied into the directory extensions/jdbc-driver/oracle/.
# Only the thin client is supported, and we recommend using the latest Oracle JDBC driver. See
# https://jira.sonarsource.com/browse/SONAR-9758 for more details.
# If you need to set the schema, please refer to http://jira.sonarsource.com/browse/SONAR-5000
#sonar.jdbc.url=jdbc:oracle:thin:@localhost:1521/XE
#----- PostgreSQL 9.3 or greater
# By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
#sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema
#----- Microsoft SQLServer 2014/2016/2017 and SQL Azure
# A database named sonar must exist and its collation must be case-sensitive (CS) and accent-sensitive (AS)
# Use the following connection string if you want to use integrated security with Microsoft Sql Server
# Do not set sonar.jdbc.username or sonar.jdbc.password property if you are using Integrated Security
# For Integrated Security to work, you have to download the Microsoft SQL JDBC driver package from
# https://www.microsoft.com/en-us/download/details.aspx?id=55539
# and copy sqljdbc_auth.dll to your path. You have to copy the 32 bit or 64 bit version of the dll
# depending upon the architecture of your server machine.
#sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;integratedSecurity=true
# Use the following connection string if you want to use SQL Auth while connecting to MS Sql Server.
# Set the sonar.jdbc.username and sonar.jdbc.password appropriately.
#sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
#----- Connection pool settings
# The maximum number of active connections that can be allocated
# at the same time, or negative for no limit.
# The recommended value is 1.2 * max sizes of HTTP pools. For example if HTTP ports are
# enabled with default sizes (50, see property sonar.web.http.maxThreads)
# then sonar.jdbc.maxActive should be 1.2 * 50 = 60.
#sonar.jdbc.maxActive=60
# The maximum number of connections that can remain idle in the
# pool, without extra ones being released, or negative for no limit.
#sonar.jdbc.maxIdle=5
# The minimum number of connections that can remain idle in the pool,
# without extra ones being created, or zero to create none.
#sonar.jdbc.minIdle=2
# The maximum number of milliseconds that the pool will wait (when there
# are no available connections) for a connection to be returned before
# throwing an exception, or <= 0 to wait indefinitely.
#sonar.jdbc.maxWait=5000
#sonar.jdbc.minEvictableIdleTimeMillis=600000
#sonar.jdbc.timeBetweenEvictionRunsMillis=30000
#--------------------------------------------------------------------------------------------------
# WEB SERVER
# Web server is executed in a dedicated Java process. By default heap size is 512MB.
# Use the following property to customize JVM options.
# Recommendations:
#
# The HotSpot Server VM is recommended. The property -server should be added if server mode
# is not enabled by default on your environment:
# http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
#
# Startup can be long if entropy source is short of entropy. Adding
# -Djava.security.egd=file:/dev/./urandom is an option to resolve the problem.
# See https://wiki.apache.org/tomcat/HowTo/FasterStartUp#Entropy_Source
#
sonar.web.javaOpts=-Xmx768m -Xms256m -XX:+HeapDumpOnOutOfMemoryError
# Same as previous property, but allows to not repeat all other settings like -Xmx
#sonar.web.javaAdditionalOpts=
# Binding IP address. For servers with more than one IP address, this property specifies which
# address will be used for listening on the specified ports.
# By default, ports will be used on all IP addresses associated with the server.
sonar.web.host=192.168.1.103
# Web context. When set, it must start with forward slash (for example /sonarqube).
# The default value is root context (empty value).
sonar.web.context=/
# TCP port for incoming HTTP connections. Default value is 9000.
sonar.web.port=9000
# The maximum number of connections that the server will accept and process at any given time.
# When this number has been reached, the server will not accept any more connections until
# the number of connections falls below this value. The operating system may still accept connections
# based on the sonar.web.connections.acceptCount property. The default value is 50.
#sonar.web.http.maxThreads=50
# The minimum number of threads always kept running. The default value is 5.
#sonar.web.http.minThreads=5
# The maximum queue length for incoming connection requests when all possible request processing
# threads are in use. Any requests received when the queue is full will be refused.
# The default value is 25.
#sonar.web.http.acceptCount=25
# By default users are logged out and sessions closed when server is restarted.
# If you prefer keeping user sessions open, a secret should be defined. Value is
# HS256 key encoded with base64. It must be unique for each installation of SonarQube.
# Example of command-line:
# echo -n "type_what_you_want" | openssl dgst -sha256 -hmac "key" -binary | base64
#sonar.auth.jwtBase64Hs256Secret=
# The inactivity timeout duration of user sessions, in minutes. After the configured
# period of time, the user is logged out.
# The default value is set to 3 days (4320 minutes)
# and cannot be greater than 3 months. Value must be strictly positive.
#sonar.web.sessionTimeoutInMinutes=4320
# A passcode can be defined to access some web services from monitoring
# tools without having to use the credentials of a system administrator.
# Check the Web API documentation to know which web services are supporting this authentication mode.
# The passcode should be provided in HTTP requests with the header "X-Sonar-Passcode".
# By default feature is disabled.
#sonar.web.systemPasscode=
#--------------------------------------------------------------------------------------------------
# SSO AUTHENTICATION
# Enable authentication using HTTP headers
#sonar.web.sso.enable=false
# Name of the header to get the user login.
# Only alphanumeric, '.' and '@' characters are allowed
#sonar.web.sso.loginHeader=X-Forwarded-Login
# Name of the header to get the user name
#sonar.web.sso.nameHeader=X-Forwarded-Name
# Name of the header to get the user email (optional)
#sonar.web.sso.emailHeader=X-Forwarded-Email
# Name of the header to get the list of user groups, separated by comma (optional).
# If the sonar.sso.groupsHeader is set, the user will belong to those groups if groups exist in SonarQube.
# If none of the provided groups exists in SonarQube, the user will only belong to the default group.
# Note that the default group will always be set.
#sonar.web.sso.groupsHeader=X-Forwarded-Groups
# Interval used to know when to refresh name, email and groups.
# During this interval, if for instance the name of the user is changed in the header, it will only be updated after X minutes.
#sonar.web.sso.refreshIntervalInMinutes=5
#--------------------------------------------------------------------------------------------------
# LDAP CONFIGURATION
# Enable the LDAP feature
# sonar.security.realm=LDAP
# Set to true when connecting to a LDAP server using a case-insensitive setup.
# sonar.authenticator.downcase=true
# URL of the LDAP server. Note that if you are using ldaps, then you should install the server certificate into the Java truststore.
# ldap.url=ldap://localhost:10389
# Bind DN is the username of an LDAP user to connect (or bind) with. Leave this blank for anonymous access to the LDAP directory (optional)
# ldap.bindDn=cn=sonar,ou=users,o=mycompany
# Bind Password is the password of the user to connect with. Leave this blank for anonymous access to the LDAP directory (optional)
# ldap.bindPassword=secret
# Possible values: simple | CRAM-MD5 | DIGEST-MD5 | GSSAPI See http://java.sun.com/products/jndi/tutorial/ldap/security/auth.html (default: simple)
# ldap.authentication=simple
# See :
# * http://java.sun.com/products/jndi/tutorial/ldap/security/digest.html
# * http://java.sun.com/products/jndi/tutorial/ldap/security/crammd5.html
# (optional)
# ldap.realm=example.org
# Context factory class (optional)
# ldap.contextFactoryClass=com.sun.jndi.ldap.LdapCtxFactory
# Enable usage of StartTLS (default : false)
# ldap.StartTLS=true
# Follow or not referrals. See http://docs.oracle.com/javase/jndi/tutorial/ldap/referral/jndi.html (default: true)
# ldap.followReferrals=false
# USER MAPPING
# Distinguished Name (DN) of the root node in LDAP from which to search for users (mandatory)
# ldap.user.baseDn=cn=users,dc=example,dc=org
# LDAP user request. (default: (&(objectClass=inetOrgPerson)(uid={login})) )
# ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
# Attribute in LDAP defining the user’s real name. (default: cn)
# ldap.user.realNameAttribute=name
# Attribute in LDAP defining the user’s email. (default: mail)
# ldap.user.emailAttribute=email
# GROUP MAPPING
# Distinguished Name (DN) of the root node in LDAP from which to search for groups. (optional, default: empty)
# ldap.group.baseDn=cn=groups,dc=example,dc=org
# LDAP group request (default: (&(objectClass=groupOfUniqueNames)(uniqueMember={dn})) )
# ldap.group.request=(&(objectClass=group)(member={dn}))
# Property used to specifiy the attribute to be used for returning the list of user groups in the compatibility mode. (default: cn)
# ldap.group.idAttribute=sAMAccountName
#--------------------------------------------------------------------------------------------------
# COMPUTE ENGINE
# The Compute Engine is responsible for processing background tasks.
# Compute Engine is executed in a dedicated Java process. Default heap size is 512MB.
# Use the following property to customize JVM options.
# Recommendations:
#
# The HotSpot Server VM is recommended. The property -server should be added if server mode
# is not enabled by default on your environment:
# http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
#
#sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
# Same as previous property, but allows to not repeat all other settings like -Xmx
#sonar.ce.javaAdditionalOpts=
#--------------------------------------------------------------------------------------------------
# ELASTICSEARCH
# Elasticsearch is used to facilitate fast and accurate information retrieval.
# It is executed in a dedicated Java process. Default heap size is 512MB.
#
# --------------------------------------------------
# Word of caution for Linux users on 64bits systems
# --------------------------------------------------
# Please ensure Virtual Memory on your system is correctly configured for Elasticsearch to run properly
# (see https://www.elastic.co/guide/en/elasticsearch/reference/5.5/vm-max-map-count.html for details).
#
# When SonarQube runs standalone, a warning such as the following may appear in logs/es.log:
# "max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]"
# When SonarQube runs as a cluster, however, Elasticsearch will refuse to start.
#
# JVM options of Elasticsearch process
#sonar.search.javaOpts=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError
# Same as previous property, but allows to not repeat all other settings like -Xmx
#sonar.search.javaAdditionalOpts=
# Elasticsearch port. Default is 9001. Use 0 to get a free port.
# As a security precaution, should be blocked by a firewall and not exposed to the Internet.
#sonar.search.port=9001
# Elasticsearch host. The search server will bind this address and the search client will connect to it.
# Default is loopback address.
# As a security precaution, should NOT be set to a publicly available address.
#sonar.search.host=
#--------------------------------------------------------------------------------------------------
# UPDATE CENTER
# Update Center requires an internet connection to request https://update.sonarsource.org
# It is enabled by default.
#sonar.updatecenter.activate=true
# HTTP proxy (default none)
#http.proxyHost=
#http.proxyPort=
# HTTPS proxy (defaults are values of http.proxyHost and http.proxyPort)
#https.proxyHost=
#https.proxyPort=
# NT domain name if NTLM proxy is used
#http.auth.ntlm.domain=
# SOCKS proxy (default none)
#socksProxyHost=
#socksProxyPort=
# Proxy authentication (used for HTTP, HTTPS and SOCKS proxies)
#http.proxyUser=
#http.proxyPassword=
# Proxy exceptions: list of hosts that can be accessed without going through the proxy
# separated by the '|' character, wildcard character '*' can be used for pattern matching
# used for HTTP and HTTPS (default none)
# (note: localhost and its literal notations (127.0.0.1, ...) are always excluded)
#http.nonProxyHosts=
#--------------------------------------------------------------------------------------------------
# LOGGING
# SonarQube produces logs in 4 logs files located in the same directory (see property sonar.path.logs below),
# one per process:
# Main process (aka. App) logs in sonar.log
# Web Server (aka. Web) logs in web.log
# Compute Engine (aka. CE) logs in ce.log
# Elasticsearch (aka. ES) logs in es.log
#
# All 4 files follow the same rolling policy (see sonar.log.rollingPolicy and sonar.log.maxFiles) but it applies
# individually (eg. if sonar.log.maxFiles=4, there can be at most 4 of each files, ie. 16 files in total).
#
# All 4 files have logs in the same format:
# 1 2 3 4 5 6
# |-----------------| |---| |-|--------------------||------------------------------| |------------------------------------------------------------------------------------------------------------------------------|
# 2016.11.16 16:47:00 INFO ce[AVht0dNXFcyiYejytc3m][o.s.s.c.t.CeWorkerCallableImpl] Executed task | project=org.sonarqube:example-java-maven | type=REPORT | id=AVht0dNXFcyiYejytc3m | submitter=admin | time=1699ms
#
# 1: timestamp. Format is YYYY.MM.DD HH:MM:SS
# YYYY: year on 4 digits
# MM: month on 2 digits
# DD: day on 2 digits
# HH: hour of day on 2 digits in 24 hours format
# MM: minutes on 2 digits
# SS: seconds on 2 digits
# 2: log level.
# Possible values (in order of descending criticality): ERROR, WARN, INFO, DEBUG and TRACE
# 3: process identifier. Possible values: app (main), web (Web Server), ce (Compute Engine) and es (Elasticsearch)
# 4: SQ thread identifier. Can be empty.
# In the Web Server, if present, it will be the HTTP request ID.
# In the Compute Engine, if present, it will be the task ID.
# 5: logger name. Usually a class canonical name.
# Package names are truncated to keep the whole field to 20 characters max
# 6: log payload. Content of this field does not follow any specific format, can vary in length and include line returns.
# Some logs, however, will follow the convention to provide data in payload in the format " | key=value"
# Especially, log of profiled pieces of code will end with " | time=XXXXms".
# Global level of logs (applies to all 4 processes).
# Supported values are INFO (default), DEBUG and TRACE
#sonar.log.level=INFO
# Level of logs of each process can be controlled individually with their respective properties.
# When specified, they overwrite the level defined at global level.
# Supported values are INFO, DEBUG and TRACE
#sonar.log.level.app=INFO
#sonar.log.level.web=INFO
#sonar.log.level.ce=INFO
#sonar.log.level.es=INFO
# Path to log files. Can be absolute or relative to installation directory.
# Default is <installation home>/logs
#sonar.path.logs=logs
# Rolling policy of log files
# - based on time if value starts with "time:", for example by day ("time:yyyy-MM-dd")
# or by month ("time:yyyy-MM")
# - based on size if value starts with "size:", for example "size:10MB"
# - disabled if value is "none". That needs logs to be managed by an external system like logrotate.
#sonar.log.rollingPolicy=time:yyyy-MM-dd
# Maximum number of files to keep if a rolling policy is enabled.
# - maximum value is 20 on size rolling policy
# - unlimited on time rolling policy. Set to zero to disable old file purging.
#sonar.log.maxFiles=7
# Access log is the list of all the HTTP requests received by server. If enabled, it is stored
# in the file {sonar.path.logs}/access.log. This file follows the same rolling policy as other log file
# (see sonar.log.rollingPolicy and sonar.log.maxFiles).
#sonar.web.accessLogs.enable=true
# Format of access log. It is ignored if sonar.web.accessLogs.enable=false. Possible values are:
# - "common" is the Common Log Format, shortcut to: %h %l %u %user %date "%r" %s %b
# - "combined" is another format widely recognized, shortcut to: %h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}"
# - else a custom pattern. See http://logback.qos.ch/manual/layouts.html#AccessPatternLayout.
# The login of authenticated user is not implemented with "%u" but with "%reqAttribute{LOGIN}" (since version 6.1).
# The value displayed for anonymous users is "-".
# The SonarQube's HTTP request ID can be added to the pattern with "%reqAttribute{ID}" (since version 6.2).
# If SonarQube is behind a reverse proxy, then the following value allows to display the correct remote IP address:
#sonar.web.accessLogs.pattern=%i{X-Forwarded-For} %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" "%reqAttribute{ID}"
# Default value (which was "combined" before version 6.2) is equivalent to "combined + SQ HTTP request ID":
#sonar.web.accessLogs.pattern=%h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" "%reqAttribute{ID}"
#--------------------------------------------------------------------------------------------------
# OTHERS
# Delay in seconds between processing of notification queue. Default is 60 seconds.
#sonar.notifications.delay=60
# Paths to persistent data files (embedded database and search index) and temporary files.
# Can be absolute or relative to installation directory.
# Defaults are respectively <installation home>/data and <installation home>/temp
#sonar.path.data=data
#sonar.path.temp=temp
# Telemetry - Share anonymous SonarQube statistics
# By sharing anonymous SonarQube statistics, you help us understand how SonarQube is used so we can improve the product to work even better for you.
# We don't collect source code or IP addresses. And we don't share the data with anyone else.
# To see an example of the data shared: login as a global administrator, call the WS api/system/info and check the Statistics field.
#sonar.telemetry.enable=true
#--------------------------------------------------------------------------------------------------
# DEVELOPMENT - only for developers
# The following properties MUST NOT be used in production environments.
# Elasticsearch HTTP connector
#sonar.search.httpPort=-1
3.4、启动sonar服务
/usr/local/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh start
3.5、访问SonarQube验证安装成功
3.6、使用admin admin登录成功以后,在Administrator->Marketplace -> plugins 中搜索chinese,安装中文汉化包
3.7、安装成功,需要重启Sonar,即可看到
3.8、注册为服务
$ vim /usr/lib/systemd/system/sonar.service
[Unit]
Description=SonarQube service
After=network.target syslog.target
[Service]
Type=forking
User=elsearch
Group=elsearch
ExecStart=/bin/bash /usr/local/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh start
ExecStop=/bin/bash /usr/local/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh stop
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
3.9、设置开机启动
$ systemctl enable sonar # 开机启动
FAQ:常见问题
- 由于7.8版本加入了elasticsearch,遇到不能以root用户启动,报错信息如下:
java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.6.2.jar:5.6.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.6.2.jar:5.6.2]
解决方案:
因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户,用新用户启动
groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch
2.由于sonar需要用新用户启动,所以sonar需要用到的所有资源必须属于新用户(包括jdk,坑3会讲到),不然会有权限问题
chown -R elsearch /usr/local/sonarqube //把sonar资源分配给用户elsearch
chgrp -R elsearch /usr/local/sonarqube //把sonar资源分配给组elsearch
3.如果忘记以新用户启动,而是以root启动,elasticsearch会在/sonarqube-6.6/temp里会加载一些配置文件,如果这些文件初次加载则是属于root用户的,启动也会失败,报权限问题
所以记住一定要以新用户elsearch启动sonar
4.启动报错:ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
ulimit -n 65535
5、Sonar-Scanner 安装配置
5.1、解压 sonar-scanner-cli-4.0.0.1744-linux.zip 安装包到 /usr/local/sonar-scanner
$ unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/sonar-scanner
5.2、配置修改/usr/local/sonar-scanner/conf/sonar-scanner.properties配置文件
$ vi /usr/local/sonar-scanner/sonar-scanner-4.0.0.1744-linux/conf/sonar-scanner.properties
修改如下:
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
5.3、添加到环境变量
配置添加 /etc/profile配置文件
$ export SONARRUNNER_HOME=/usr/local/sonar-scanner/sonar-scanner-4.0.0.1744-linux
$ export PATH=$SONARRUNNER_HOME/bin:$PATH
$ source /etc/profile
5.4、查看版本
$ sonar-scanner -v
显示如下:
INFO: Scanner configuration file: /usr/local/sonar-scanner/sonar-scanner-4.0.0.1744-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 4.0.0.1744
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-957.21.3.el7.x86_64 amd64
5.5、运行
$ /usr/local/sonar-scanner/sonar-scanner-4.0.0.1744-linux/bin/sonar-scanner -e -Dsonar.host.url=http://localhost:9000 -Dsonar.scm.disabled=true -Dsonar.language=php -Dsonar.projectName=LinuxHub -Dsonar.projectVersion=1.0.0 -Dsonar.projectKey=LinuxHub -Dsonar.sources=/data/jenkins/workspace/LinuxHub -Dsonar.projectBaseDir=/data/jenkins/workspace/LinuxHub
5.6、参数说明
sonar.projectKey=LinuxHub #项目的key
sonar.projectName=LinuxHub #项目的名字
sonar.projectVersion=1.0.0 #项目的版本
sonar.sources=/data/jenkins/workspace/LinuxHub #需要分析的源码的目录,多个目录用英文逗号隔开
sonar.language=php #开发语言
sonar.scm.disabled=true #禁止scm
5.7、登录SonarQube平台查看报告
参考链接:
http://www.chinacion.cn/article/4410.html
更新时间:2023-12-28 09:15