引言
靜態(tài)代碼分析是指在不運行代碼的方式下,通過詞法分析、語法分析、控制流、數(shù)據(jù)流分析等技術對程序代碼進行掃描的技術。它的目的是驗證代碼是否滿足規(guī)范性、安全性、可靠性、可維護性的要求。
統(tǒng)計證明,在整個軟件開發(fā)生命周期中,30% 至 70% 的代碼邏輯設計和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復的。所以使用靜態(tài)代碼掃描技術,在編碼階段發(fā)現(xiàn)更多問題是在整個軟件開發(fā)生命周期中非常關鍵的一環(huán)。
針對靜態(tài)掃描目前有各種各樣的工具,比如:
Java 語言的 Checkstyle, FindBugs, PMD等,幫助檢測代碼編寫規(guī)范上存在的問題和漏洞;
Python 語言的 Pyflakes, PyLint, pep8等;
C# 語言的 FxCop、StyleCop等。
通過這些工具掃描的結果分析后,根據(jù)結果來優(yōu)化代碼問題,以提高代碼質(zhì)量。
在單獨使用以上這些工具時,我們會面臨這樣的問題:
針對包含不同語言的項目,需要不同工具進行掃描,其結果不方便匯總;
一段時間內(nèi)每一次掃描的結果的差異,無法友好的呈現(xiàn)或者追溯。
SonarQube就是這樣的一個平臺,能夠支持多種語言的靜態(tài)代碼掃描,也方便維護呈現(xiàn)項目代碼的質(zhì)量狀態(tài)。
SonarQube介紹
SonarQube(Sonar)是一個開源平臺,用于管理源代碼的質(zhì)量,它不僅是一個質(zhì)量數(shù)據(jù)報告工具,更是代碼質(zhì)量管理平臺。它通過插件的形式來管理代碼,它支持的語言包括:Java,Python,PHP,C#,C,JS等。
關于SonarQube 的架構、基本使用以及與Jenkins的集成我們曾經(jīng)做過介紹:
Jenkins+SonarQube實現(xiàn)Python項目靜態(tài)掃描:
https://mp.weixin.qq.com/s/P08uahvqjqGeEOa7A6b2Hg
Docker來搭建 SonarQube
最新版本的 SonarQube Server(目前最新版本:8.8),已經(jīng)不支持我們常用的 JDK1.8,并且不支持我們最常用 MySQL 數(shù)據(jù)庫,要想使用歐冠最新版本的 SonarQube使用Docker來搭建是最簡單的辦法之一了。
下面介紹的是如何使用Docker來搭建 SonarQube 代碼掃描平臺。
首先搭建數(shù)據(jù)庫環(huán)境:
我們使用postgresql 數(shù)據(jù)庫。
# 拉取鏡像
docker pull postgres
# 啟動容器
docker run --name pgdb -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -e POSTGRES_DB=sonar -p 5432:5432 -d postgres
注:
POSTGRES_USER參數(shù)為數(shù)據(jù)庫用戶名,其值為sonar
POSTGRES_PASSWORD 參數(shù)為數(shù)據(jù)庫密碼,其值為sonar
POSTGRES_DB 參數(shù)為SonarQube使用的數(shù)據(jù)庫名,其值為sonar
搭建 SonarQube Server :
我們使用最新版本的SonarQube鏡像
拉取鏡像
docker pull sonarqube
# 啟動容器
docker run --name sq -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://10.0.0.19:5432/sonar -p 9000:9000 -d sonarqube
補充:
在初次啟動的過程中可能會有這樣的報錯:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
這是 ElasticSearch 啟動的時候報的錯誤,原因是因為:ElasticSearch用戶擁有的內(nèi)存權限太小,至少需要262144。
在 /etc/sysctl.conf 文件最后添加如下語句:
vm.max_map_count=262144
再輸入命令:sysctl -p
立即生效
為了數(shù)據(jù)的持久化可以使用-v命令或者docker volume,參考目錄:
Postgresql:
/var/lib/postgresql/data-d
SonarQube:
/opt/sonarqube/extensions
/opt/sonarqube/logs
/opt/sonarqube/data
為了更方便的網(wǎng)絡配置可以使用docker network 動態(tài)管理網(wǎng)絡
# 創(chuàng)建網(wǎng)絡
network create sonar
# 在啟動命令中添加參數(shù)
--network sonar
# 修改SonarQube 的數(shù)據(jù)庫連接參數(shù)
SONARQUBE_JDBC_URL=jdbc:postgresql://pgdb:5432/sonar
微信號 : TestOps
知乎:@TestOps云層