歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~java
本文來自 雲計算教程系列,由 穿鞋跑得快編譯。
代碼質量是特定代碼片斷的有用性和可維護性的近似值。質量代碼將使維護和擴展應用程序的任務變得更加容易。它有助於確保在未來進行必要的更改時引入更少的漏洞。mysql
SonarQube是一個開源工具,能夠幫助進行代碼質量分析和報告。它會掃描用戶的源代碼,查找潛在的錯誤,漏洞和可維護性問題,而後在報告中顯示結果,方便用戶識別應用程序中的潛在問題。linux
SonarQube工具包含兩個子應用程序:分析引擎,它安裝在開發人員的機器上,以及一個用於記錄保存和報告的集中式服務器。單個SonarQube服務器實例能夠支持多個掃描程序,使用戶能夠統一集中來自許多開發人員的代碼質量報告。nginx
在本教程中,用戶經過配置SonarQube服務器和掃描程序來分析並建立代碼及質量報告。以後可使用SonarQube工具掃描機器,對用戶的機器進行測試。git
在開始閱讀本教程以前,你須要遵循如下內容:github
sudo
命令的非root帳號、內存爲2GB或更多的UGBntu 16.04服務器,而且已開啓防火牆。沒有服務器的同窗能夠在這裏購買,不過我我的更推薦您使用免費的騰訊雲開發者實驗室進行試驗,學會安裝後在購買服務器。sonarqube.example.com
。在安裝SonarQube以前,咱們須要執行幾個步驟。因爲SonarQube是一個將做爲服務運行的Java應用程序,而且由於以root用戶身份運行服務確定不理想,咱們將專門建立另外一個系統用戶來運行SonarQube服務。而後咱們將建立安裝目錄並設置其權限併爲SonarQube建立一個MySQL數據庫和用戶。web
首先,建立一個sonarqube用戶:sql
$ sudo adduser --system --no-create-home --group --disabled-login sonarqube
咱們只會使用此用戶來運行SonarQube服務,所以咱們建立了一個沒法直接登陸服務器的系統用戶。數據庫
接下來,建立保存SonarQube文件的目錄:後端
$ sudo mkdir /opt/sonarqube
建立目錄後,更新權限,以便用戶可以讀取和寫入此目錄中的文件:
$ sudo chown -R sonarqube:sonarqube /opt/sonarqube
SonarQube版本以壓縮格式打包,所以unzip
會使用用戶的軟件包管理器安裝該實用程序,以便用戶能夠提取分發文件:
$ sudo apt-get install unzip
接下來,咱們須要建立爲SonarQube使用的數據庫和憑據。做爲root用戶登陸MySQL服務器:
$ mysql -u root -p
建立SonarQube數據庫:
mysql> CREATE DATABASE sonarqube; mysql> EXIT;
建立SonarQube用於訪問數據庫的憑據。
mysql> CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password'; mysql> GRANT ALL ON sonarqube.* to sonarqube@'localhost';
授予權限,以便新建立的用戶能夠更改SonarQube數據庫:
mysql> GRANT ALL ON sonarqube.* to sonarqube@'localhost';
而後更改應用權限並退出MySQL控制檯:
mysql> FLUSH PRIVILEGES; mysql> EXIT;
當咱們已經有了用戶和目錄,便可下載並安裝SonarQube。
首先將當前工做目錄更改成SonarQube安裝目錄:
$ cd /opt/sonarqube
而後,轉到SonarQube下載頁面並獲取SonarQube 7.0的下載連接。SonarQube有兩個版本能夠在頁面上下載,但在這個特定的教程中咱們將使用SonarQube 7.0。
獲取連接後,下載文件:
$ sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.0.zip
而後解壓縮文件:
$ sudo unzip sonarqube-7.0.zip
文件解壓縮後,刪除下載的zip文件,由於你再也不須要它:
$ sudo rm sonarqube-7.0.zip
當全部文件都已到位,便可配置SonarQube。
咱們須要在SonarQube配置文件中編輯一些內容。即:
首先打開SonarQube配置文件:
$ sudo nano sonarqube-7.0/conf/sonar.properties
將SonarQube用於訪問數據庫的用戶名和密碼更改成用戶在MySQL建立的用戶名和密碼:
... sonar.jdbc.username=sonarqube sonar.jdbc.password=some_secure_password ...
而後,告訴SonarQube使用MySQL做爲數據庫驅動程序:
... sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false ...
最後,告訴SonarQube以服務器模式運行,只收聽本地地址:
... sonar.web.host=127.0.0.1 sonar.web.javaAdditionalOpts=-server
更新這些字段後,保存並關閉該文件。
接下來,咱們將SonarQube服務器配置爲做爲服務運行,以便在服務器從新啓動時自動啓動。
建立服務文件:
$ sudo nano /etc/systemd/system/sonarqube.service
將如下內容添加到文件中,該文件指定SonarQube服務應如何啓動和中止:
[Unit] Description=SonarQube service After=syslog.target network.target [Service] Type=forking ExecStart=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh stop User=sonarqube Group=sonarqube Restart=always [Install] WantedBy=multi-user.target
關閉並保存文件,而後啓動SonarQube服務:
$ sudo service sonarqube start
檢查SonarQube服務的狀態以確保它已啓動並按預期運行:
$ service sonarqube status
若是服務已成功啓動,你將會看到一條與此相似的「Active」行:
● sonarqube.service - SonarQube service Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset Active: active (running) since Sun 2018-03-04 01:29:44 UTC; 1 months 14 days
接下來,將SonarQube服務配置爲在引導時自動啓動:
$ sudo systemctl enable sonarqube
與大多數其餘Java應用程序同樣,SonarQube將須要一些時間來初始化。初始化過程完成後,您就能夠繼續下一步了。
咱們已經運行了SonarQube服務器,如今是時候配置Nginx了,它將是咱們的SonarQube實例的反向代理和HTTPS終結器。
首先爲站點建立一個新的Nginx配置文件:
$ sudo nano /etc/nginx/sites-enabled/sonarqube
添加此配置,以便Nginx可以將傳入流量路由到SonarQube:
server { listen 80; server_name sonarqube.example.com; location / { proxy_pass http://127.0.0.1:9000; } }
保存並關閉文件。
接下來,確保你的配置文件沒有任何的語法錯誤:
$ sudo nginx -t
若是看到錯誤,修復它們並輸入sudo nginx -t
命令再次運行。一旦沒有錯誤,重啓Nginx:
$ sudo service nginx restart
要進行快速測試,能夠在瀏覽器中訪問http://sonarqube.example.com
。打開後你將看到SonarQube界面的歡迎語。
如今咱們已經完成了設置反向代理,咱們能夠繼續保護咱們的SonarQube服務器。
SonarQube附帶了一個默認的管理員用戶名和密碼管理員。此默認密碼不安全,所以咱們但願將其更新爲更安全的安全作法。
首先訪問安裝的URL,而後使用默認憑據登陸。
登陸後,單擊「 管理」選項卡,從下拉列表中選擇「 安全性 」,而後選擇「 用戶」:
在此處,單擊「管理員」賬戶行右側的小齒輪,而後單擊「更改密碼」。務必將密碼更改成易容易記憶但難以猜想的內容。
如今建立一個普通用戶,你可使用該用戶建立項目並從同一頁面向服務器提交分析結果。單擊頁面右上角的「 建立用戶」 按鈕:
而後經過單擊「標記」列中的按鈕併爲此標記指定名稱,爲特定用戶建立標記。稍後在調用代碼掃描程序時須要此令牌,所以請務必將其寫在安全的地方。
最後,你可能會注意到SonarQube實例對全世界都是開放的,任何人均可以查看分析結果和源代碼。 此設置很是不安全,所以咱們將SonarQube配置爲僅容許登陸用戶訪問界面。在同一管理選項卡中,單擊配置,而後單擊左窗格中的安全性。翻轉此頁面上的開關以要求用戶身份驗證。
如今咱們已經完成了服務器的設置,讓咱們設置掃描儀。
SonarQube的代碼掃描程序是一個單獨的程序包,您能夠將其安裝在與運行SonarQube服務器的計算機不一樣的計算機上,例如本地開發工做站或連續交付服務器。
在本教程中,咱們將在託管SonarQube服務器的同一臺服務器上安裝代碼掃描程序。
首先爲掃描程序建立一個目錄並切換到新目錄:
$ sudo mkdir /opt/sonarscanner $ cd /opt/sonarscanner
而後使用wget
下載適用於Linux的SonarQube掃描儀:
$ sudo wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
解壓縮掃描程序,而後刪除zip存檔文件:
$ sudo unzip sonar-scanner-cli-3.0.3.778-linux.zip $ sudo rm sonar-scanner-cli-3.0.3.778-linux.zip
以後,咱們須要修改一些設置以使掃描程序與咱們安裝的服務器合做。打開配置文件進行編輯:
$ sudo nano sonar-scanner-3.0.3.778-linux/conf/sonar-scanner.properties
首先,告訴掃描儀應該在哪裏提交代碼分析結果。取消註釋開頭的行sonar.host.url
並將其設置爲SonarQube服務器的URL:
/opt/sonarscanner/sonar-scanner-3.0.3.778-linux/conf/sonar.properties sonar.host.url=https://sonarqube.example.com
保存並關閉文件。如今使掃描儀二進制可執行:
$ sudo chmod +x sonar-scanner-3.0.3.778-linux/bin/sonar-scanner
而後建立一個符號連接,以便用戶能夠在不指定路徑的狀況下調用掃描程序:
$ sudo ln -s /opt/sonarscanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner
設置了掃描儀,咱們就能夠運行第一次代碼掃描了。
在主目錄中建立一個新的工做目錄,而後切換到該目錄:
$ cd ~ $ mkdir sonar-test && cd sonar-test
下載示例項目:
$ wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip
解壓縮項目並刪除存檔文件:
$ unzip master.zip $ rm master.zip
接下來,切換到示例項目目錄:
$ cd sonar-scanning-examples-master/sonarqube-scanner
運行掃描程序,將先前建立的令牌傳遞給它:
$ sonar-scanner -D sonar.login=your_token_here
掃描完成後,您將在控制檯上看到相似的內容:
INFO: Task total time: 9.834 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 14.076s INFO: Final Memory: 47M/112M INFO: ------------------------------------------------------------------------
示例項目的報告如今將在SonarQube儀表板上,以下所示:
當已確認SonarQube服務器和掃描儀都按預期工做,您就可讓SonarQube分析您的代碼。
將項目轉移到服務器,或按照第六步中的步驟在工做站上安裝和配置SonarQube掃描儀,並將其配置爲指向SonarQube服務器。
而後,在項目的根目錄中,建立一個SonarQube配置文件:
$ nano sonar-project.properties
您將使用此文件向SonarQube介紹有關項目的一些信息:
首先,定義項目密鑰,該項目密鑰是項目的惟一ID。您可使用任何您喜歡的內容,但此ID對於SonarQube實例必須是惟一的:
sonar-project.properties # Unique ID for this project sonar.projectKey=foobar:hello-world ...
而後,指定項目名稱和版本,以便SonarQube可以在儀表板中顯示此信息:
sonar-project.properties ... sonar.projectName=Hello World Project sonar.projectVersion=1.0 ...
最後,告訴SonarQube在哪裏查找代碼文件。請注意,這與配置文件所在的目錄有關。將其設置爲當前目錄:
sonar-project.properties # Path is relative to the sonar-project.properties file. Replace "" by "/" on Windows. sonar.sources=.
關閉並保存文件。
您已準備好對本身的代碼運行代碼質量分析。再次運行
sonar-scanner
,傳遞你的令牌:
$ sonar-scanner -D sonar.login=your_token_here
掃描完成後,您將看到與此相似的摘要:
INFO: Task total time: 5.417 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 9.659s INFO: Final Memory: 39M/112M INFO: ------------------------------------------------------------------------
項目的代碼質量報告將出如今SonarQube界面上。
在本教程中,您已設置SonarQube服務器和掃描程序以進行代碼質量分析。如今,只需運行掃描,SonarQube將告訴您可能存在的問題確保代碼易於維護!
使用SonarQube維護代碼質量的同時,數據安全也很重要,若是您的服務器是在生產環境使用, 建議您直接使用雲關係型數據庫,雲關係型數據庫讓您在雲中輕鬆部署、管理和擴展的關係型數據庫,提供安全可靠、伸縮靈活的按需雲數據庫服務。騰訊雲關係型數據庫提供 MySQL、SQL Server、MariaDB、PostgreSQL 數據庫引擎,並針對數據庫引擎的性能進行了優化。雲關係型數據庫是一種高度可用的託管服務,提供容災、備份、恢復、監控、遷移等數據庫運維全套解決方案,可將您從耗時的數據庫管理任務中解放出來,讓您有更多時間專一於您的應用和業務。
更多Linux教程請前往騰訊雲+社區學習更多知識。
問答
MongoDB的利弊?
相關閱讀
Redis雲端架構深刻淺出
騰訊雲數據庫回檔解決方案
世界盃黑馬出沒,莫斯科沒有眼淚
雲學院 · 課程推薦 | 騰訊專項技術測試組長,結合8年經驗爲你細說冷熱分離法則
此文已由做者受權騰訊雲+社區發佈,更多原文請點擊
搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!
海量技術實踐經驗,盡在雲加社區!