sonar
Sonar(SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。
下载地址
https://www.sonarqube.org/downloads/
社区版免费的
创建
- 创建sonar数据库
- 创建sonar 用户,和授权
mysql> create user 'sonar' identified by 'sonar';
Query OK, 0 rows affected (0.09 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.09 sec)
mysql> grant all privileges on sonar.* to 'sonar'@'%' identified by 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all privileges on sonar.* to 'sonar'@'localhost' identified by 'sonar';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
修改配置
下载和 解压 zip
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip
unzip sonarqube-7.6 必须低于7.9版本,大于7.9不支持mysql权限 chmod -R 777 sonarqube-8.8.0.42792
修改配置文件 sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url = jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
sonar.web.port=9000
- sonar的启动需要的是普通的用户角色,如果使用root启动的时候,会提示错误
adduser sonarUser
passwd sonarUser
chown -R sonarUser:sonarUser sonarqube
切换到新建的用户角色sonarUser中,启动sonar
su sonarUser
chmod -R 777 /data/conf/sonar
/data/conf/sonar/bin/linux-x86-64/sonar.sh start
- 中文插件安装
登录,默认的登录账号信息是admin,admin
从配置中找应用市场,从应用市场中搜索chinese即可,安装完插件以后需要重启服务
安装sucess
必备环境
- mysql 5.7
- jdk 1.8
- sonar 7.6
流程
- 安装和解压 sonar7.6
- 登录mysql创建sonar用户,和创建sonar数据库
mysql> use mysql
Database changed
mysql> select user,host from user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| sonar | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| sonar | localhost |
+---------------+-----------+
6 rows in set (0.00 sec)
mysql> grant all on sonar.* to 'sonar'@'%' identified by 'sonar';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on sonar.* to 'sonar'@'%' identified by 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all on sonar.* to 'sonar'@'%' identified by 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all on sonar.* to 'sonar'@'localhost' identified by 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 使用sonar用户登录一次mysql
[root@VM-0-2-centos /]# mysql -usonar -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.33-log Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| sonar |
+--------------------+
2 rows in set (0.00 sec)
mysql>
- 数据库配置
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.port=9000
- 启动sonarqube
- 报错
[root@VM-0-2-centos linux-x86-64]# ./sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2021.04.13 16:37:04 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /usr/local/software/sonar
qube-7.6/tempjvm 1 | 2021.04.13 16:37:04 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
jvm 1 | 2021.04.13 16:37:04 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePref
ix=es]] from [/usr/local/software/sonarqube-7.6/elasticsearch]: /usr/local/software/sonarqube-7.6/elasticsearch/bin/elasticsearch -Epath.conf=/usr/local/software/sonarqube-7.6/temp/conf/esjvm 1 | 2021.04.13 16:37:04 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
jvm 1 | 2021.04.13 16:37:04 INFO app[][o.e.p.PluginsService] no modules loaded
jvm 1 | 2021.04.13 16:37:04 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
jvm 1 | 2021.04.13 16:37:04 WARN app[][o.s.a.p.AbstractProcessMonitor] Process exited with exit value [es]: 1
jvm 1 | 2021.04.13 16:37:04 INFO app[][o.s.a.SchedulerImpl] Process [es] is stopped
jvm 1 | 2021.04.13 16:37:04 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
wrapper | <-- Wrapper Stopped
- 去logs查看日志es.log:
[root@VM-0-2-centos logs]# tail -f es.log
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.3.jar:5.6.3]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.3.jar:5.6.3]
... 6 more
报错原因:因为安全问题elasticsearch不让用root用户直接运行。
- 创建centos用户
[root@VM-0-2-centos logs]# groupadd sonarqube
[root@VM-0-2-centos logs]# useradd sonarqube -g sonarqube -p sonarqube
[root@VM-0-2-centos logs]# chown -R sonarqube.sonarqube /usr/local/software/sonarqube-7.6
- 切换系统的新用户运行; 运行sonarqube
[root@VM-0-2-centos logs]# su sonarqube
[sonarqube@VM-0-2-centos logs]
SUCESS
[sonarqube@VM-0-2-centos linux-x86-64]$ ./sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2021.04.13 16:45:58 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /usr/local/software/sonar
qube-7.6/tempjvm 1 | 2021.04.13 16:45:58 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
jvm 1 | 2021.04.13 16:45:58 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePref
ix=es]] from [/usr/local/software/sonarqube-7.6/elasticsearch]: /usr/local/software/sonarqube-7.6/elasticsearch/bin/elasticsearch -Epath.conf=/usr/local/software/sonarqube-7.6/temp/conf/esjvm 1 | 2021.04.13 16:45:58 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
jvm 1 | 2021.04.13 16:45:58 INFO app[][o.e.p.PluginsService] no modules loaded
jvm 1 | 2021.04.13 16:45:58 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
jvm 1 | 2021.04.13 16:46:04 INFO app[][o.s.a.SchedulerImpl] Process[es] is up
jvm 1 | 2021.04.13 16:46:04 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePre
fix=web]] from [/usr/local/software/sonarqube-7.6]: /usr/local/java/jdk1.8.0_161/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/usr/local/software/sonarqube-7.6/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:/usr/local/software/sonarqube-7.6/lib/jdbc/h2/h2-1.3.176.jar org.sonar.server.app.WebServer /usr/local/software/sonarqube-7.6/temp/sq-process7886745995658547287properties
- 访问服务器
- 防火墙放开9000端口
- http://119.29.14.214:9000/ (admin/admin)
-
效果
sonar.jpg
- 再次运行会报错
因为这个是sonar异常关机后产生的错误,正常关机必须是通过网页关机,不能直接 ctrl+C;
[sonarqube@VM-0-2-centos linux-x86-64]$ ./sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2021.04.13 17:04:32 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /usr/local/software/sonarq
ube-7.6/tempjvm 1 |
jvm 1 | WrapperSimpleApp: Encountered an error running main: java.nio.file.AccessDeniedException: /usr/local/software/sonar
qube-7.6/temp/conf/es/jvm.optionsjvm 1 | java.nio.file.AccessDeniedException: /usr/local/software/sonarqube-7.6/temp/conf/es/jvm.options
jvm 1 | at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
jvm 1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
jvm 1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
jvm 1 | at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:244)
jvm 1 | at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
jvm 1 | at java.nio.file.Files.delete(Files.java:1126)
jvm 1 | at org.sonar.process.FileUtils2$DeleteRecursivelyFileVisitor.visitFile(FileUtils2.java:186)
jvm 1 | at org.sonar.process.FileUtils2$DeleteRecursivelyFileVisitor.visitFile(FileUtils2.java:181)
jvm 1 | at java.nio.file.Files.walkFileTree(Files.java:2670)
jvm 1 | at java.nio.file.Files.walkFileTree(Files.java:2742)
jvm 1 | at org.sonar.process.FileUtils2.deleteDirectoryImpl(FileUtils2.java:143)
jvm 1 | at org.sonar.process.FileUtils2.deleteDirectory(FileUtils2.java:112)
jvm 1 | at org.sonar.application.AppFileSystem$CleanTempDirFileVisitor.visitFile(AppFileSystem.java:117)
jvm 1 | at org.sonar.application.AppFileSystem$CleanTempDirFileVisitor.visitFile(AppFileSystem.java:101)
jvm 1 | at java.nio.file.Files.walkFileTree(Files.java:2670)
jvm 1 | at org.sonar.application.AppFileSystem.createOrCleanTempDirectory(AppFileSystem.java:96)
jvm 1 | at org.sonar.application.AppFileSystem.reset(AppFileSystem.java:62)
jvm 1 | at org.sonar.application.App.start(App.java:55)
jvm 1 | at org.sonar.application.App.main(App.java:78)
jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
jvm 1 | at java.lang.reflect.Method.invoke(Method.java:498)
jvm 1 | at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
jvm 1 | at java.lang.Thread.run(Thread.java:748)
wrapper | <-- Wrapper Stopped
[sonarqube@VM-0-2-centos linux-x86-64]$
解决方法:
删除sonarqube temp目录下的所有文件即可
[sonarqube@VM-0-2-centos bin]$ rm -rf temp
- 安装中文插件
默认显示英文,安装chinese pack插件,让界面语言显示中文:
Administration > Configuration配置 -> Marketplace应用市场 -> 搜索"chinese Pack" -> Install安装插件
- bug:
- 选择和sonar版本一致的插件否在报错,
Error while downloading plugin 'l10nzhtw' with version '1.0'. No compatible plugin found.
弹出重启提示 ->选择Restart重启应用 -> 再登录就是中文界面