1.SonarQube架構介紹
SonarQube平台由4個組件組成:
-
一台SonarQube Server啟動3個主要過程:
- Web服務器,供開發人員,管理人員瀏覽高質量的快照並配置SonarQube實例
- 基於Elasticsearch的Search Server從UI進行后退搜索
- Compute Engine服務器,負責處理代碼分析報告並將其保存在SonarQube數據庫中
-
一個SonarQube數據庫要存儲:
- SonarQube實例的配置(安全性,插件設置等)
- 項目,視圖等的質量快照。
- 服務器上安裝了多個SonarQube插件,可能包括語言,SCM,集成,身份驗證和管理插件
- 在構建/持續集成服務器上運行一個或多個SonarScanner,以分析項目
- 架構圖如下:
6. SonarQube如何與其他ALM工具集成以及使用SonarQube的各種組件的位置:
-
- )開發人員將他們的代碼放入他們最喜歡的SCM中:git,SVN,TFVC等。
- )Continuous Integration Server會觸發自動生成,並執行運行SonarQube分析所需的SonarScanner。
- )分析報告將發送到SonarQube服務器進行處理。
2.sonarqube 8.0安裝
前置條件:1)裝好open JDK 11 ,解壓即可,不用配置環境變量
下載地址:http://jdk.java.net/archive/
下載版本:
2 )裝好Postgresql 10
3 ) 准備好sonarqube 8.0社區版安裝包
平台說明:
在Linux上運行,則必須確保:
vm.max_map_count
大於或等於262144fs.file-max
大於或等於65536- 運行SonarQube的用戶可以打開至少65536個文件描述符
- 運行SonarQube的用戶可以打開至少4096個線程
用root用戶新增兩個配置文件即可滿足上述要求:
vim /etc/sysctl.d/99-sonarqube.conf(加入下面兩行內容)
vm.max_map_count=262144
fs.file-max=65536
vim /etc/security/limits.d/99-sonarqube.conf(加入下面兩行內容)
sonarqube - nofile 65536
sonarqube - nproc 4096
seccomp過濾器
默認情況下,Elasticsearch使用seccomp filter。在大多數發行版中,此功能已在內核中激活,但是在諸如Red Hat Linux 6的發行版中,此功能已停用。如果使用不具有此功能的發行版,並且無法在激活seccomp的情況下升級到較新版本,則必須通過sonar.search.javaAdditionalOpts
在$ SONARQUBE HOME / conf / sonar.properties_中進行更新來顯式停用此安全層:
sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
您可以使用以下方法檢查seccomp在內核上是否可用:
$ grep SECCOMP /boot/config-$(uname -r)
如果您的內核具有seccomp,您將看到:
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y CONFIG_SECCOMP=y
配置文件修改說明:
1.修改sonarqube 8.0/conf/wrapper.conf
取消注釋這一行,並改為指向自己的open JDK 11的路徑即可(即/path/to/my/jdk/bin/java)
wrapper.java.command=/usr/local/jdk11/jdk11-11/bin/java
2.修改sonarqube 8.0/conf/sonar.properties
需要修改的僅有以下三項,其他用默認配置即可
sonar.jdbc.username=sonarqube
sonar.jdbc.password=密碼
sonar.jdbc.usr=jdbc:postgresql://IP:5432/sonarqube
權限修改說明:
sonarqube不能用root用戶啟動,故新建用戶,並改權限
adduser sonarqube
passwd sonarqube (可省略這一步)
chown -R sonarqube:sonarque sonarqube 8.0
啟動sonarqube 8.0 server說明:
su sonarqube
cd /sonarqube 8.0/bin/linux-x86-64
./sonar.sh console
如果輸出的最后兩行如下,就說明運行成功了:
jvm 1 | 2019.10.29 01:59:14 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
jvm 1 | 2019.10.29 01:59:14 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
啟動成功后,瀏覽器中訪問IP:9000即可進入sonarqube管理界面,登錄名、密碼 admin、 admin
再次運行 sonarqube 的時候不用通過 console 啟動了,直接用 start 在后台運行就好了。
sonarqube 運行參數 console | start | stop | force-stop | restart | status | dump
常見報錯解決:
process [web] is stopped
failed to initialize component [standardserver[-1]]
解決辦法:查看9000端口是否被占用
netstat -apn | grep 9000
若被占用, 則修改sonar.properties的webserver的配置
sonar.web.port=9002
process [es] is stopped
j
(3)用root用戶,配置sysctl.conf,在底部添加如下內容
vi /etc/sysctl.conf
vm.max_map_count=655360
(4)用root用戶,執行sysctl -p,使配置生效