我的老板給我推送了這篇文章,之后我成為了頂級碼農!


歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐干貨哦~

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

介紹

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

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

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

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

准備

在開始閱讀本教程之前,你需要遵循以下內容:

第一步 - 准備安裝

在安裝SonarQube之前,我們需要執行幾個步驟。由於SonarQube是一個將作為服務運行的Java應用程序,並且因為以root用戶身份運行服務肯定不理想,我們將專門創建另一個系統用戶來運行SonarQube服務。然后我們將創建安裝目錄並設置其權限並為SonarQube創建一個MySQL數據庫和用戶。

首先,創建一個sonarqube用戶:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM