如何將SonarQube代碼質(zhì)量分析工具安裝到Ubuntu Server 20.04上苔可?

如果您是云原生開發(fā)人員(或任何其他開發(fā)人員)缴挖,可能需要一款工具來(lái)分析代碼,幫助查找安全問題焚辅、缺陷映屋、漏洞、異常和一般問題法焰。如果您只從事一個(gè)小項(xiàng)目秧荆,可以通過老式的手動(dòng)方法來(lái)解決。如果您經(jīng)常為CI/CD之類的項(xiàng)目編寫代碼埃仪,工作量決定了您可能無(wú)法手動(dòng)檢查乙濒。這時(shí)如何是好?

您總是可以安裝SonarQube之類的工具。這個(gè)基于Web的軟件擅長(zhǎng)使開發(fā)人員能夠編寫更干凈更安全的代碼卵蛉。如果您恰好擁有本地Linux服務(wù)器或者AWS颁股、谷歌云或Azure之類的云帳戶,可以免費(fèi)部署SonarQube社區(qū)版傻丝。該版本有以下功能:

為15種廣泛使用的語(yǔ)言支持靜態(tài)代碼分析

缺陷和漏洞檢測(cè)

代碼中的安全熱點(diǎn)審查

代碼異常跟蹤

技術(shù)債務(wù)解決

代碼質(zhì)量度量指標(biāo)和歷史記錄

CI/CD集成

可擴(kuò)展甘有,有50多個(gè)社區(qū)插件

您還可以從版本矩陣中查看SonarQube收費(fèi)版本的功能

下面介紹在Ubuntu Server 20.04上安裝并運(yùn)行SonarQube社區(qū)版的過程。

您需要什么?

Ubuntu Server 20.04的運(yùn)行實(shí)例

擁有sudo特權(quán)的用戶

如何修改內(nèi)核系統(tǒng)限制?

我們要做的頭件事是對(duì)幾個(gè)內(nèi)核系統(tǒng)限制進(jìn)行一番修改葡缰。使用以下命令打開sysctl.conf文件進(jìn)行編輯:

sudo?nano?/etc/sysctl.conf?

將以下幾行添加到該文件的末尾:

vm.max_map_count=262144??

fs.file-max=65536??

ulimit?-n?65536??

ulimit?-u?4096?

保存并關(guān)閉文件亏掀。

下一步,我們將編輯limits.conf泛释。用以下命令打開該文件:

sudo?nano?/etc/security/limits.conf?

在該文件末尾滤愕,添加以下內(nèi)容:

sonarqube?-?nofile?65536??

sonarqube?-?nproc?4096?

保存并關(guān)閉文件。

重啟系統(tǒng)怜校,以便變更生效间影。

如何安裝OpenJDK 11?

我們現(xiàn)在將安裝OpenJDK依賴項(xiàng)。用以下命令來(lái)安裝:

sudo apt-get install openjdk-11-jdk -y

如何安裝和配置PostgreSQL?

針對(duì)SonarQube的數(shù)據(jù)庫(kù)部分茄茁,我們將使用PostgreSQL(已棄用了支持MySQL的功能)魂贬。由于標(biāo)準(zhǔn)存儲(chǔ)庫(kù)中沒有PostgreSQL巩割,我們必須添加它。

用以下命令下載并安裝GPG密鑰:

wget?-q?https://www.postgresql.org/media/keys/ACCC4CF8.asc?-O?-?|?sudo?apt-key?add?-?

用以下命令創(chuàng)建新的apt存儲(chǔ)庫(kù):

sudo?sh?-c?'echo?"deb?http://apt.postgresql.org/pub/repos/apt/?`lsb_release?-cs`-pgdg?main"?>>?/etc/apt/sources.list.d/pgdg.list'?

用以下命令安裝PostgreSQL:

sudo?apt?install?postgresql?postgresql-contrib?-y?

用以下命令啟動(dòng)并啟用數(shù)據(jù)庫(kù)服務(wù):

sudo?systemctl?enable?postgresql??

sudo?systemctl?start?postgresql?

用以下命令設(shè)置PostgreSQL密碼:

sudo?passwd?postgres?

會(huì)提示您輸入并核實(shí)數(shù)據(jù)庫(kù)管理員用戶的新密碼付燥。

用以下命令切換到postgres用戶:

su?-?postgres?

用以下命令為SonarQube數(shù)據(jù)庫(kù)創(chuàng)建新用戶:

createuser?sonar?

用以下命令登錄到PostgreSQL控制臺(tái):

psql?

用以下命令為新的sonar用戶設(shè)置密碼:

ALTER?USER?sonar?WITH?ENCRYPTED?PASSWORD?'password';?

密碼是不重復(fù)的強(qiáng)密碼宣谈。

用以下命令創(chuàng)建新的sonarqube數(shù)據(jù)庫(kù):

CREATE?DATABASE?sonarqube?OWNER?sonar;?

用以下命令為數(shù)據(jù)庫(kù)授予必要的權(quán)限:

GRANT?ALL?PRIVILEGES?ON?DATABASE?sonarqube?to?sonar;?

用以下命令退出PostgreSQL控制臺(tái):

\q?

用以下命令退出postgres用戶:

exit?

用以下命令啟用PostgreSQL服務(wù):

sudo?systemctl?enable?postgresql?

如何下載并解壓SonarQube?

處理好數(shù)據(jù)庫(kù)后,我們現(xiàn)在可以下載并解壓SonarQube机蔗。最新版是8.5.1.3814蒲祈。您應(yīng)該檢查下載鏈接(https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.5.1.38104.zip)甘萧,確保下載的是最新版萝嘁。

想下載SonarQube,執(zhí)行該命令:

wget?https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.5.1.38104.zip?

用以下命令解壓該文件:

unzip?sonarqube*.zip?

如果您發(fā)現(xiàn)沒有unzip命令扬卷,用以下命令安裝它:

sudo?apt-get?install?zip?-y?

用以下命令移動(dòng)并重命名剛創(chuàng)建的目錄:

sudo?mv?sonarqube-8.5.1.38104?/opt/sonarqube?

如果您下載的版本不是8.5.1.38104牙言,確保用上述命令更改該版本號(hào)。

如何創(chuàng)建新的SonarQube組和用戶?

現(xiàn)在我們需要為SonarQube創(chuàng)建新的組和用戶怪得。用以下命令創(chuàng)建一個(gè)組:

sudo?groupadd?sonar?

下一步咱枉,用以下命令創(chuàng)建用戶,并添加到組(并將其主目錄設(shè)成/opt/sonarqube目錄):

sudo?useradd?-c?"SonarQube?-?User"?-d?/opt/sonarqube/?-g?sonar?sonar?

用以下命令更改/opt/sonarqube目錄的所有權(quán):

sudo?chown?-R?sonar:sonar?/opt/sonarqube/?

如何配置SonarQube?

下一步是配置SonarQube徒恋。用以下命令打開配置文件來(lái)編輯:

sudo?nano?/opt/sonarqube/conf/sonar.properties?

在該文件中尋找下列行:

#sonar.jdbc.username=??

#sonar.jdbc.password=??

#sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube??

#sonar.search.javaOpts=-Xmx512m?-Xms512m?-XX:+HeapDumpOnOutOf?

您需要從上面四行刪除#字符蚕断,并將第一行改成:

sonar.jdbc.username=sonar?

更改密碼行,加入為sonar PostgreSQL用戶創(chuàng)建的密碼入挣。

還應(yīng)該編輯下列行亿乳,確保它們體現(xiàn)了您在下面看到的內(nèi)容:

sonar.jdbc.username=sonar?

sonar.jdbc.password=PASSWORD?

sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube??

sonar.web.host=0.0.0.0??

sonar.web.port=9000??

sonar.web.javaAdditionalOpts=-server??

sonar.search.javaOpts=-Xmx512m?-Xms512m?-XX:+HeapDumpOnOutOfMemoryError??

sonar.log.level=INFO??

sonar.path.logs=logs?

其中PASSWORD是您為sonar PostgreSQL用戶設(shè)置的密碼。

保存并關(guān)閉文件径筏。

如何創(chuàng)建systemd文件并啟動(dòng)服務(wù)?

現(xiàn)在不妨創(chuàng)建systemd文件葛假,以便可以控制SonarQube服務(wù)。用以下命令創(chuàng)建文件:

sudo?nano?/etc/systemd/system/sonarqube.service?

在該文件中滋恬,粘貼以下內(nèi)容:

[Unit]??

Description=SonarQube?service??

After=syslog.target?network.target??

[Service]??

Type=forking?

ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh?start??

ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh?stop??

User=sonar??

Group=sonar??

Restart=always??

LimitNOFILE=65536??

LimitNPROC=4096??

[Install]??

WantedBy=multi-user.target?

保存并關(guān)閉文件聊训。

用以下命令啟用并啟動(dòng)服務(wù):

systemctl?enable?sonarqube?

systemctl?start?sonarqube?

如何安裝和配置NGINX?

我們將使用NGINX作為SonarQube的反向代理。想安裝NGINX恢氯,執(zhí)行該命令:

sudo?apt-get?install?nginx?-y?

用以下命令啟動(dòng)并啟用NGINX服務(wù):

sudo?systemctl?enable?nginx??

sudo?systemctl?start?nginx?

用以下命令創(chuàng)建新的NGINX配置文件:

sudo?nano?/etc/nginx/sites-enabled/sonarqube.conf?

在該文件中带斑,粘貼以下內(nèi)容:

server{?

????listen??????80;?

???server_name?sonarqube.da.com;?

????access_log??/var/log/nginx/sonar.access.log;?

????error_log???/var/log/nginx/sonar.error.log;?

????proxy_buffers?16?64k;?

????proxy_buffer_size?128k;?

????location?/?{?

????????proxy_pass??http://127.0.0.1:9000;?

????????proxy_next_upstream?error?timeout?invalid_header?http_500?http_502?http_503?http_504;?

proxy_redirectoff;?

????????proxy_set_header????Host????????????$host;?

proxy_set_header????X-Real-IP???????$remote_addr;?

proxy_set_header????X-Forwarded-For?$proxy_add_x_forwarded_for;?

????????proxy_set_header????X-Forwarded-Proto?http;?

????}?

}?

保存并關(guān)閉文件。

用以下命令重啟NGINX:

sudo?systemctl?restart?nginx?

如何訪問SonarQube?

SonarQube現(xiàn)已安裝勋拟,打開瀏覽器勋磕,指向http://SERVER_IP:9000(SERVER_IP是您服務(wù)器的IP地址)。您會(huì)看到歡迎頁(yè)面(圖A)指黎。

圖A:SonarQube歡迎頁(yè)面還充當(dāng)儀表板

點(diǎn)擊“登錄”朋凉,使用登錄信息admin/admin。一旦登錄進(jìn)去醋安,您會(huì)看到SonarQube主頁(yè)面杂彭,您可以在這里開始上傳有待分析的代碼(圖B)墓毒。

圖B:SonarQube主頁(yè)面已準(zhǔn)備就緒

恭喜您有了一款功能強(qiáng)大的工具,可幫助編寫沒有問題的干凈代碼亲怠。經(jīng)常且明智地使用它所计。

原文鏈接:https://developer.51cto.com/art/202011/632996.htm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市团秽,隨后出現(xiàn)的幾起案子主胧,更是在濱河造成了極大的恐慌,老刑警劉巖习勤,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踪栋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡图毕,警方通過查閱死者的電腦和手機(jī)夷都,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)予颤,“玉大人囤官,你說(shuō)我怎么就攤上這事「蚺埃” “怎么了党饮?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)驳庭。 經(jīng)常有香客問我刑顺,道長(zhǎng),這世上最難降的妖魔是什么嚷掠? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任捏检,我火速辦了婚禮,結(jié)果婚禮上不皆,老公的妹妹穿的比我還像新娘贯城。我一直安慰自己,他們只是感情好霹娄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布能犯。 她就那樣靜靜地躺著,像睡著了一般犬耻。 火紅的嫁衣襯著肌膚如雪踩晶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天枕磁,我揣著相機(jī)與錄音渡蜻,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茸苇,可吹牛的內(nèi)容都是我干的排苍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼学密,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淘衙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起腻暮,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤彤守,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哭靖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體具垫,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年款青,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了做修。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霍狰。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抡草,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔗坯,到底是詐尸還是另有隱情康震,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布宾濒,位于F島的核電站腿短,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绘梦。R本人自食惡果不足惜橘忱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卸奉。 院中可真熱鬧钝诚,春花似錦、人聲如沸榄棵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疹鳄。三九已至拧略,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘪弓,已是汗流浹背垫蛆。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袱饭。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓弛随,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宁赤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舀透,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容