1. 程式人生 > >我的老板給我推送了這篇文章,之後我成為了頂級碼農!

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

mod oracl 默認 tar 重新啟動 界面 lis 網頁服務器 cte

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

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

介紹

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

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

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

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

準備

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

  • 一臺已經設置好可以使用sudo命令的非root賬號、內存為2GB或更多的UGBntu 16.04服務器,並且已開啟防火墻。沒有服務器的同學可以在這裏購買,不過我個人更推薦您使用免費的騰訊雲開發者實驗室進行試驗,學會安裝後在購買服務器。
  • 在服務器上安裝Oracle Java 8,您可以參考 如何在Ubuntu 18.04上安裝Java。
  • 對Nginx和MySQL進行配置,您可以參考在CVM上搭建網頁服務器(LNMP)。
  • 給Nginx 配置SSL證書,您可以參考如何在Ubuntu上使用SSL來保護Nginx。
  • 當用戶安裝SonarQube的服務器時,會有一個完全限定的域名和一個A記錄。我們將在本教程中使用sonarqube.example.com

第一步 - 準備安裝

在安裝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,然後使用默認憑據登錄。

登錄後,單擊“ 管理”選項卡,從下拉列表中選擇“ 安全性 ”,然後選擇“ 用戶”

技術分享圖片

在此處,單擊“管理員”帳戶行右側的小齒輪,然後單擊“更改密碼”。務必將密碼更改為易容易記憶但難以猜測的內容。

現在創建一個普通用戶,你可以使用該用戶創建項目並從同一頁面向服務器提交分析結果。單擊頁面右上角的“ 創建用戶” 按鈕:

技術分享圖片

然後通過單擊“標記”列中的按鈕並為此標記指定名稱,為特定用戶創建標記。稍後在調用代碼掃描程序時需要此令牌,因此請務必將其寫在安全的地方。

最後,你可能會註意到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 送你一份技術課程大禮包!

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

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