個人老闆給我推送了這篇文章,以後我成爲了頂級碼農!

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~java

本文來自 雲計算教程系列,由 穿鞋跑得快編譯。

介紹

代碼質量是特定代碼片斷的有用性和可維護性的近似值。質量代碼將使維護和擴展應用程序的任務變得更加容易。它有助於確保在未來進行必要的更改時引入更少的漏洞。mysql

SonarQube是一個開源工具,能夠幫助進行代碼質量分析和報告。它會掃描用戶的源代碼,查找潛在的錯誤,漏洞和可維護性問題,而後在報告中顯示結果,方便用戶識別應用程序中的潛在問題。linux

SonarQube工具包含兩個子應用程序:分析引擎,它安裝在開發人員的機器上,以及一個用於記錄保存和報告的集中式服務器。單個SonarQube服務器實例能夠支持多個掃描程序,使用戶能夠統一集中來自許多開發人員的代碼質量報告。nginx

在本教程中,用戶經過配置SonarQube服務器和掃描程序來分析並建立代碼及質量報告。以後可使用SonarQube工具掃描機器,對用戶的機器進行測試。git

準備

在開始閱讀本教程以前,你須要遵循如下內容:github

第一步 - 準備安裝

在安裝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

首先將當前工做目錄更改成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配置文件中編輯一些內容。即:

  • 咱們須要指定SonarQube服務器用戶名和密碼用於數據庫鏈接。
  • 咱們還須要告訴SonarQube將MySQL用於咱們的後端數據庫。
  • 咱們將告訴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

SonarQube附帶了一個默認的管理員用戶名和密碼管理員。此默認密碼不安全,所以咱們但願將其更新爲更安全的安全作法。

首先訪問安裝的URL,而後使用默認憑據登陸。

登陸後,單擊「 管理」選項卡,從下拉列表中選擇「 安全性 」,而後選擇「 用戶」

img

在此處,單擊「管理員」賬戶行右側的小齒輪,而後單擊「更改密碼」。務必將密碼更改成易容易記憶但難以猜想的內容。

如今建立一個普通用戶,你可使用該用戶建立項目並從同一頁面向服務器提交分析結果。單擊頁面右上角的「 建立用戶」 按鈕:

img

而後經過單擊「標記」列中的按鈕併爲此標記指定名稱,爲特定用戶建立標記。稍後在調用代碼掃描程序時須要此令牌,所以請務必將其寫在安全的地方。

最後,你可能會注意到SonarQube實例對全世界都是開放的,任何人均可以查看分析結果和源代碼。 此設置很是不安全,所以咱們將SonarQube配置爲僅容許登陸用戶訪問界面。在同一管理選項卡中,單擊配置,而後單擊左窗格中的安全性。翻轉此頁面上的開關以要求用戶身份驗證。

img

如今咱們已經完成了服務器的設置,讓咱們設置掃描儀。

第六步 - 設置代碼掃描程序

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儀表板上,以下所示:

img

當已確認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 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區

相關文章
相關標籤/搜索