Sonar实战
sonarqube部署
临时性部署
docker run -d --name sonarqube \
-p 9000:9000 -p 9092:9092 \
sonarqube
8.x以上的版本部署
docker run -d \
--privileged=true \
--name sonarqube_postgres \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $PWD/postgresql:/var/lib/postgresql/data \
postgres
mkdir sonarqube_data sonarqube_extensions sonarqube_logs
#mac无需执行以下命令,linux需执行
chown -R 999:999 sonarqube_data sonarqube_extensions sonarqube_logs
#docker启动sonarqube
docker run -d --name sonarqube_hogwarts -p 9000:9000 -p 9092:9092 --link sonarqube_postgres:db \
-e SONARQUBE_JDBC_USERNAME=sonarqube -e SONARQUBE_JDBC_PASSWORD=sonarqube \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://db/sonarqube" \
-v $PWD/sonarqube_data:/opt/sonarqube/data \
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \
sonarqube
访问 http://127.0.0.1:9000
用户名:admin 密码:admin
演练项目
git clone https://github.com/SonarSource/sonar-scanning-examples.git
cd sonar-scanning-examples
sonar-scanner
#login为生成的token
#js项目
sonar-scanner \
-Dsonar.host.url=http://127.0.0.1:9000 \
-Dsonar.login=你sonar生成的token值
#maven项目
mvn clean verify sonar:sonar \
-Dsonar.host.url=http://127.0.0.1:9000 \
-Dsonar.login=你sonar生成的token值
小坑
使用sonar-scanner的时候,会因为以下插件导致扫描失败
AEM Rules for SonarQube插件不支持jdk1.8
我启动容器的时候 本地端口5432被占用我改成了6432
docker run \
-d \
--name sonarqube_postgres \
-p 6432:5432 \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $PWD/postgresql:/var/lib/postgresql/data \
postgres:12
启动sonarqube
docker run -d --name sonarqube_boe -p 9000:9000 -p 9092:9092 --link sonarqube_postgres:db \
-e SONARQUBE_JDBC_USERNAME=sonarqube \
-e SONARQUBE_JDBC_PASSWORD=sonarqube \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://db:6432/sonarqube" \
-v $PWD/sonarqube_data:/opt/sonarqube/data \
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \
sonarqube:latest
但是检查sonarqube_boe 容器的日志里 数据库起来失败了,不清楚是为什么,信助能帮我分析下吗 错误如下
2020.08.18 03:51:31 INFO web[][o.a.t.u.n.NioSelectorPool] Using a shared selector for servlet write/read
2020.08.18 03:51:32 INFO web[][o.e.p.PluginsService] no modules loaded
2020.08.18 03:51:32 INFO web[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2020.08.18 03:51:32 INFO web[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2020.08.18 03:51:32 INFO web[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2020.08.18 03:51:33 INFO web[][o.s.s.e.EsClientProvider] Connected to local Elasticsearch: [127.0.0.1:9001]
2020.08.18 03:51:33 INFO web[][o.s.s.p.LogServerVersion] SonarQube Server / 8.4.1.35646 / 7267e37dda923d9336125657aa6d0878af14af53
2020.08.18 03:51:33 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://db:6432/sonarqube
2020.08.18 03:51:33 ERROR web[][o.s.s.p.PlatformImpl] Web server startup failed
java.lang.IllegalStateException: Fail to connect to database
at org.sonar.db.DefaultDatabase.start(DefaultDatabase.java:86)
at org.sonar.core.platform.StartableCloseableSafeLifecyleStrategy.start(StartableCloseableSafeLifecyleStrategy.java:40)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
at org.picocontainer.behaviors.Stored.start(Stored.java:110)
at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1016)
at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1009)
at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:90)
at org.sonar.server.platform.platformlevel.PlatformLevel1.start(PlatformLevel1.java:166)
at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:213)
at org.sonar.server.platform.PlatformImpl.startLevel1Container(PlatformImpl.java:172)
at org.sonar.server.platform.PlatformImpl.init(PlatformImpl.java:86)
at org.sonar.server.platform.web.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:43)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4689)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5155)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').
at org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:118)
at org.sonar.db.DefaultDatabase.start(DefaultDatabase.java:83)
... 24 common frames omitted
Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (Connection to db:6432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.)
at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:669)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:544)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:753)
at org.sonar.db.profiling.NullConnectionInterceptor.getConnection(NullConnectionInterceptor.java:31)
at org.sonar.db.profiling.ProfiledDataSource.getConnection(ProfiledDataSource.java:317)
at org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:115)
你首先看下你的sonarqube_postgres的日志
谢谢 看了postgres的日志发现没有新写日志,改用下面的命令重新起就起来了
-e S ONARQUBE_JDBC_URL="jdbc:postgresql://db/sonarqube"
想了想是自己理解有问题,想当然的加上了6432,这里还是应该用jdbc:postgresql://db/sonarqube,容器之间的连接,通信用的应该是容器内部的端口5432,是这么理解吧
这个SONARQUBE_JDBC_URL="jdbc:postgresql://db/sonarqube"是固定的一个写法。