建置 SonarQube|Piece of DevOps
建置一套基本的程式碼自動審查機制,因為有 Docker 其實並不困難。首先介紹如何在 Docker 上快速建置程式碼審查的環境:
SonarQube
SoanrQube 在 Community 版本中,可以審查大部分常用的語言(可審查語言列表)。SonarQube 審查後,會進一步產生報告,顯示是否有潛藏的漏洞,或著有可以改進的地方,並且提供對應問題的由來及處理方針。這對專案來說,不僅能提高整體品質,進一步還能增進程式開發者 Coding 相關概念及能力。
既然是快速建置,所以在這裡直接使用在 Docker Hub 上,SonarQube 提供的 Image(sonarqube - Docker Hub)來建置。版本的選擇上,則是使用
7.6-community。選擇此版本是為了之後使用 sonar-gitlab-plugin。這部分,會在後續的文章中會再詳細討論。確認版本後,就直接把它拉下來吧!$ docker run \ --name sonarqube7.6 \ -p 9090:9000 \ -d sonarqube:7.6-communitySonarQube 預設的使用的 Port 是 9000。我們將此 Port 對應到本機的 9090,也就是我們從外部要連接它的 port 號。現在,我們擁有一個預設版的 SonarQube 了。我們也可以透過
http://127.0.0.1:9090 連接到我們的 SonarQube,其預設的帳號密碼都是 admin。但如果你有一堆的設定想餵給 SonarQube,你可以試試以下的方式:$ docker run \ --name sonarqube7.6 \ -p 9090:9000 \ -v $(pwd)/sonarqube_conf:/opt/sonarqube/conf \ -v $(pwd)/sonarqube_extensions:/opt/sonarqube/extensions \ -v $(pwd)/sonarqube_logs:/opt/sonarqube/logs \ -v $(pwd)/sonarqube_data:/opt/sonarqube/data \ -d sonarqube:7.6-community
在這裡,我們建立 4 個 Volume,讓我們能更便利的設定 SonarQube 及取得相關資訊,但需要注意的是,如果加入 sonarqube_extensions,SonarQube 將不會安裝任何預設的 plugin。這四個 Volume 分別用於:
- sonarqube_conf:加入設定檔 sonar.properties(可設定項目介紹),重啟 Container 後生效。需注意,SonarQube 8.0 前,連接 DB 相關的兩個 config 是無法在 sonar.properties 中生效的,分別為:
- sonar.jdbc.username
- sonar.jdbc.password
- sonarqube_extensions:加入額外的 plugin,例如 sonar-gitlab-plugin。Container 啟動後,會在其中產生一個子目錄 downloads。將 plugin 的 jar 檔放進去,重啟SonarQube 後(http://127.0.0.1:9090/admin/system -> Restart Server),SonarQube 就會安裝對應的 plugin。
- sonarqube_data:內建的 H2 Database 及 Elasticsearch 存儲資料的位置。
- sonarqube_log:SonarQube 相關的 Log。
$ docker run --name sonar-postgres \ -e POSTGRES_PASSWORD=<presgres password> \ -e POSTGRES_DB=<db name> \ -d postgres
- POSTGRES_PASSWORD:預設帳號 postgres 的密碼。
- POSTGRES_DB:預設 Database 的名字。
$ docker inspect sonar-postgres | grep -e "\"IPAddress" | tr " ,\"" "\0" | head -n 1 output> IPAddress:<sonar-postgres IP>在
docker run 的時候,帶入以下參數,就可以連接到剛開啟的 Postgresql 囉:$ docker run \ --name sonarqube7.6 \ -p 9090:9000 \ -e sonar.jdbc.username=postgres \ -e sonar.jdbc.password=<presgres password> \ -e sonar.jdbc.url=jdbc:postgresql://<sonar-postgres IP>/<db name> \ -d sonarqube:7.6-community
參數分別代表的是:
- sonar.jdbc.username:DB 的 username,這邊使用的是 Postgresql 預設帳號 postgres。
- sonar.jdbc.password:則是對應的 password,也就是剛剛建立 sonar-postgres 時給的 <presgres password>。
- sonar.jdbc.url:連接 DB 的 URL,除了需要給 <sonar-postgres IP>,最後需要加上剛剛建立 sonar-postgres 時給的 <db name>,讓 SonarQube 知道要連接哪個 Database。
如此,我們就建置好 SonarQube 了!剛開始使用,建議先用預設的 SonarQube 即可,這樣可以避免少裝了某些 Plugin 而導致分析品質不佳的情形(抓不到蟲)。另外,SonarQube 還可以讓你找有哪些 Plugin 可以使用(http://127.0.0.1:9090/admin/marketplace),找到想裝的 Plugin 就可以直接安裝。可以善加利用這個功能哦!