本文主要在Linux環境操作,Centos7.2
1.java 1.8.0安裝及環境變量配置
安裝及配置參考:
http://jingyan.baidu.com/article/d5c4b52bebcb64da570dc571.html
2.mysql:5.6.36安裝及配置
數據庫安裝采用二進制安裝mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz,參考如下
http://jingyan.baidu.com/article/a378c9609eb652b3282830fd.html
1、卸載mariadb
yum list installed | grep mariadb #檢查mariadb是否已安裝
yum -y remove mariadb* #全部卸載
修改配置文件/etc/my.cnf
default-storage-engine=INNODB
innodb_buffer_pool_size=256M
innodb_log_file_size=256M
max_allowed_packet=100M
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
本地 Mysql 創建數據庫
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
本地 Mysql 創建用戶並分配權限
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%' IDENTIFIED BY 'sonar' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar' WITH GRANT OPTION;
FLUSH PRIVILEGES;
需要給用戶添加權限:
登錄mysql,在mysql下輸入如下命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; //允許用戶root使用密碼123456從任何主機連接到MYSQL服務器
如果需要制定主機,則可以用下面的命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.1.1.123' IDENTIFIED BY '123456' WITH GRANT OPTION; //允許用戶root從IP為10.1.1.123的主機連接到MYSQL服務器,並使用123456作為登錄密碼
3.sonar版本:6.5
下載地址:https://www.sonarqube.org/downloads/
unzip sonarqube-6.5.zip
修改配置文件/etc/profile
export SONAR_HOME=/usr/local/sonarqube-6.5
export PATH=/jboss/apache-jmeter-2.10/bin/:$JAVA_HOME/bin://usr/local/mysql5.6.36/bin:$SONAR_HOME/bin/linux-x86-64:$MAVEN_HOME/bin:$SONAR_SCANNER_HOME/bin:/u01/ant1.9.9/bin:$PATH
修改完成后,source /etc/profile
修改conf下配置文件
3.1、修改 sonar.properties
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
3.2 啟動服務
/usr/local/sonarqube-6.5/bin/linux-x86-64/目錄下
./sonar.sh start
查看是否啟動:netstat -pantu |grep 9000
http://localhost:9000登陸頁面,默認登陸admin,密碼:admin
4. 下載sonar-scanner3.0
添加環境變量:
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner-3.0
export PATH=/jboss/apache-jmeter-2.10/bin/:$JAVA_HOME/bin://usr/local/mysql5.6.36/bin:$SONAR_HOME/bin/linux-x86-64:$MAVEN_HOME/bin:$SONAR_SCANNER_HOME/bin:/u01/ant1.9.9/bin:$PATH
5.代碼管理:svn,目前把需要掃描的下載到/u01/svn/目錄下
http://192.168.120.10:4024/svn/ygyr
svn checkout http://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 svn checkout svn://路徑(目錄或文件的全路徑) [本地目錄全路徑] --username 用戶名 # 例子: svn co svn://localhost/測試工具 /home/testtools --username wzhnsc svn co http://localhost/test/testapp --username wzhnsc svn checkout svn://localhost/測試工具 /home/testtools --username wzhnsc svn checkouthttp://localhost/test/testapp --username wzhnsc
5.1.在src目錄下增加sonar-project.properites
# must be unique in a given SonarQube instance
sonar.projectKey=pcWeb
# this is the name displayed in the SonarQube UI
sonar.projectName=pcWeb
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=.
sonar.java.binaries=.
sonar.language=java
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
# Additional Parameters
sonar.my.propety=value
sonar.core.codeCoveragePlugin=jacoco
sonar.jacoco.reportPath=/u01/report/workspace/sonar/target
sonar.jcoco.itReportPath=/u01/report/workspace/sonar/target
sonar.dynamicAnalysis=reuseReports
6. 執行sonar-scanner
在執行時報錯:
13:50:42.385 ERROR: Error during SonarQube Scanner execution
java.lang.IllegalStateException: Unable to load component class org.sonar.scanner.scan.ProjectLock
at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:71)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:678)
at org.sonar.core.platform.ComponentContainer.getComponentByType(ComponentContainer.java:283)
at org.sonar.scanner.scan.ProjectScanContainer.doBeforeStart(ProjectScanContainer.java:112)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:129)
at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47)
at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:144)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:129)
at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:119)
at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:116)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:76)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:171)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:128)
at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.scanner.scan.DefaultInputModuleHierarchy
at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:71)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:69)
... 24 more
Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.api.batch.bootstrap.ProjectReactor
at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:71)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
at org.picocontainer.injectors.SingleMemberInjector.getMemberArguments(SingleMemberInjector.java:61)
at org.picocontainer.injectors.MethodInjector.getMemberArguments(MethodInjector.java:100)
at org.picocontainer.injectors.MethodInjector$2.run(MethodInjector.java:112)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.MethodInjector.decorateComponentInstance(MethodInjector.java:120)
at org.picocontainer.injectors.CompositeInjector.decorateComponentInstance(CompositeInjector.java:58)
at org.picocontainer.injectors.Reinjector.reinject(Reinjector.java:142)
at org.picocontainer.injectors.ProviderAdapter.getComponentInstance(ProviderAdapter.java:96)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:69)
... 38 more
Caused by: You must define the following mandatory properties for 'Unknown': sonar.projectKey, sonar.sources
7. 進入http://localhost:9000頁面