[Sonarqube] 使用 Docker 佈建 Sonar

在網路上找到以下利用 Docker 啟動 Sonar 的指令主要用於 sonarqube:6.7.5 ,首先可以利用以下的 Docker 指令將 sonarqube 下載到本機的程式庫裡面,接著在準備好一個 SQL 的資料庫之後可以啟動 sonarqube

docker pull sonarqube:6.7.5

docker run -d --name sonar \ 
  -p 9000:9000 \  
  -p 9092:9092 \ 
  -v /data/sonar/conf:/opt/sonarqube/conf \ 
  -v /data/sonar/data:/opt/sonarqube/data \ 
  -v /data/sonar/logs:/opt/sonarqube/logs \ 
  -v /data/sonar/extensions:/opt/sonarqube/extensions \ 
  -e "SONARQUBE_JDBC_USERNAME=sonar" \ 
  -e "SONARQUBE_JDBC_PASSWORD=sonar" \ 
  -e "SONARQUBE_JDBC_URL=jdbc:mysql://172.17.0.2:3306/db_sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" 
sonarqube:6.7.5

Official Site 的建議如果要安裝最新版本的 Sonarcube 則應該要使用以下指令:

docker run -d --name sonarqube \
    -p 9000:9000 \
    -v /path/to/conf:/opt/sonarqube/conf \
    -v /path/to/data:/opt/sonarqube/data \
    -v /path/to/logs:/opt/sonarqube/logs \
    -v /path/to/extensions:/opt/sonarqube/extensions \
    sonarqube

發生 Mysql 版本不相容的問題,SonarQube 最新的版本只支援 MySql 5.6 以上的版本,由於筆者的 Sql 資料庫是 5.5 版本因此無法成功連接到資料庫,解決方法是利用 Docker 在虛擬出一個 MySQL 5.7 的版本。

docker run -d --name sonar \
-p 9000:9000 \
-e sonar.jdbc.username=yuting \
-e sonar.jdbc.password=****** \
-e sonar.jdbc.url=jdbc:mysql://localhost:3306/yuting_sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false \
sonarqube

當 Sonar 啟動的時候,可以輸入以下指令觀看 Sonar 啟動的紀錄檔。

docker container logs sonar
2019.07.13 07:53:03 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/opt/sonarqube/temp
-Xmx512m
-Xms128m
-XX:+HeapDumpOnOutOfMemoryError
-Djava.security.egd=file:/dev/./urandom
-cp ./lib/common/*:./lib/server/*:/opt/sonarqube/lib/jdbc/mysql/mysql-connector-java-5.1.42.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process8944840775747773965properties

成功啟動之後可以把自己的程式 Project Import 進去,如下圖所示,之後就可以開始分析自己的程式碼了:)關於如何匯入自己的程式碼可以參考這一篇

在使用 Docker 的時候參考的 Docker 指令集:

備註:在部署 Sonar 的過程中發生以下的錯誤訊息,查明原因之後是因為 Docker Chain 被不明原因清除了,解決方式是重新啟動整個 Docker 的乘載器。

6c78ce991bc6a583ef059a9d73060ee8a503a939d49a93411cae35c1ae0ed36c

docker: Error response from daemon: driver failed programming external connectivity on endpoint sonar (232e0d29670ba6012ec26dd2a6f87e9cce3294942711898f3f0b7b8de59ad8de):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9000 -j DNAT --to-destination 172.17.0.3:9000 ! -i docker0: iptables: No chain/target/match by that name.

SonarQube 登入的預設帳號與密碼都是 admin.