上一篇我們主要聊了下程式碼質量管理平臺sonarqube的安裝部署以及它的工作方式做了簡單的描述和程式碼掃描演示;回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13822428.html;今天我們來聊一下使用持續整合工具jenkins結合程式碼質量管理平臺sonarqube來做程式碼掃描的相關配置;
通過前面對jenkins的介紹使用,我們知道jenkins是一款高度外掛化的軟體,其擴充套件性非常好;我們需要對其jenkins賦予某種功能,那麼我們直接安裝對應的外掛即可;同樣的道理,我們需要jenkins結合sonarqube來做程式碼質量掃描,那麼我們就需要讓jenkins知道sonarqube在哪裡,通過jenkins的api呼叫,把掃描器掃描的結果通過sonarqube放在對應的資料庫中;這樣一來,我們在執行jenkins的任務時,只需要配置sonar-scanner就好;當然要把jenkins上的sonar-scanner對程式碼的掃描結果放在指定的sonarqube配置的資料庫中,我們首先要在jenkins上安裝對sonarqube支援的外掛;其次sonarqube和掃描器sonar-scanner是可以不在同一主機的;結合sonarqube和掃描器sonar-scanner的工作邏輯,掃描器只需要配置連線sonarqube的相關地址以及對應專案的相關屬性,然後掃描器就可以正常工作了;我們可以理解為一個sonarqube平臺對應多臺server上的sonar-scanner;只要sonar-scanner能夠正常的連線到sonarqube,就能把本地server上的專案程式碼掃描結果寫到sonarqube指定的資料庫中,通過sonarqube的web平臺給予展示;好了,介紹了jenkins結合sonarqube做程式碼掃描的工作邏輯後,我們來看一下具體的配置吧!!
1、在jenkins上安裝支援sonarqube scanner的外掛
提示:安裝好sonarqube scanner外掛後,重啟jenkins讓其外掛生效;
2、配置sonarqube scanner關聯sonarqube server
提示:在jenkins的系統管理--->系統配置裡找到sonarqube servers進行配置,把對應的sonarqube server的名稱和地址配置上即可,這裡的名稱是你標識sonarqube server的字元,可以是任意一個合法的名稱;
3、配置jenkins關聯sonarqube scanner
提示:在jenkins的系統管理--->系統全域性工具配置裡找到sonarqube sanner進行配置;如果jenkins所在server上沒有手動安裝的有sonarqube scanner,那麼我們可以把自動安裝勾選上,然後給它起一個名稱,選擇對應的版本後,點選應用,jenkins會自動幫我們把對應版本的sonarqube scanner安裝上;如果本地有sonarqube scanner,我們可以不讓jenkins幫我們自動安裝,我們只需要指定sonarqube scanner的安裝位置即可;如下
提示:我這裡在jenkins上是沒有手動安裝sonarqube-scanner,所以我們指定的目錄當然也是不存在的;如果本地安裝的有,指定其安裝目錄和對應給sonarqube-scanner起的名稱即可;以上方式選擇其中一種就好;配置好以後,點選應用;
4、在jenkins的任務中配置專案進行掃描
4.1、在gitlab上新建一個空專案,然後複製其克隆地址
4.2、將其空專案克隆到本地
[root@node04 ~]# ll total 6640 drwxr-xr-x 4 root root 103 Jul 25 2016 sonar-examples-master -rw-r--r-- 1 root root 6796222 Aug 20 2019 sonar-examples-master.zip [root@node04 ~]# git clone git@192.168.0.46:test-app/test-app.git Cloning into 'test-app'... warning: You appear to have cloned an empty repository. [root@node04 ~]# ll total 6640 drwxr-xr-x 4 root root 103 Jul 25 2016 sonar-examples-master -rw-r--r-- 1 root root 6796222 Aug 20 2019 sonar-examples-master.zip drwxr-xr-x 3 root root 18 Oct 17 16:53 test-app [root@node04 ~]# cd test-app/ [root@node04 test-app]#
3、將專案程式碼上傳到伺服器並放置到克隆的本地目錄中,然後提交到gitlab
[root@node04 test-app]# ll total 0 [root@node04 test-app]# cp -r /root/sonar-examples-master/projects/languages/python/python-sonar-runner/* . [root@node04 test-app]# ll total 12 -rw-r--r-- 1 root root 461 Oct 17 16:54 README.md -rw-r--r-- 1 root root 338 Oct 17 16:54 sonar-project.properties drwxr-xr-x 5 root root 93 Oct 17 16:54 src -rw-r--r-- 1 root root 290 Oct 17 16:54 validation.txt [root@node04 test-app]# git add . [root@node04 test-app]# git config --add user.name admin [root@node04 test-app]# git config --add user.email admin@admin.com [root@node04 test-app]# git commit -m 'this is test demo' [master (root-commit) b795d85] this is test demo 12 files changed, 526 insertions(+) create mode 100644 README.md create mode 100644 sonar-project.properties create mode 100644 src/__init__.py create mode 100644 src/badfortune.py create mode 100644 src/directory/file_in_directory.py create mode 100644 src/package/__init__.py create mode 100644 src/package/file_in_package.py create mode 100644 src/samples/__init__.py create mode 100644 src/samples/fortune.py create mode 100644 src/samples/letters.py create mode 100644 src/samples/strfile.py create mode 100644 validation.txt [root@node04 test-app]# git log commit b795d851eadf7b2abb8c015319a2b8ea0c260d4b Author: admin <admin@admin.com> Date: Sat Oct 17 16:55:52 2020 +0800 this is test demo [root@node04 test-app]# git remote -v origin git@192.168.0.46:test-app/test-app.git (fetch) origin git@192.168.0.46:test-app/test-app.git (push) [root@node04 test-app]# git push origin master Counting objects: 15, done. Delta compression using up to 4 threads. Compressing objects: 100% (11/11), done. Writing objects: 100% (15/15), 8.28 KiB | 0 bytes/s, done. Total 15 (delta 0), reused 0 (delta 0) To git@192.168.0.46:test-app/test-app.git * [new branch] master -> master [root@node04 test-app]#
驗證:到gitlab上檢視,是否將專案提交到倉庫了?
提示:可以看到現在gitlab對應倉庫就有了對應的專案檔案;
在jenkins上配置任務,將其我們上傳的程式碼從gitlab上拉取下來,然後做程式碼掃描
提示:這裡我們建立任務時,可以在原始碼管理寫上對應專案的克隆地址,以及憑證;上面配置表示在jenkins執行這個任務時,它會到我們指定的倉庫地址將其程式碼拖到本地;
提示:這裡主要是配置程式碼掃描器的配置,告訴sonarscanner在哪裡去找原始碼,對應原始碼是什麼語言編寫的(寫原始碼字尾名稱,不能寫python),對應原始碼的編碼;到此程式碼掃描就配置完了,後續如果還有其他構建操作,我們可以繼續新增對應的構建模組;最後都編輯好了後,點選應用即可;
驗證:執行jenkins任務,看看是否能夠將程式碼從gitlab上拉去下來進行程式碼掃描?
提示:構建完成沒有報錯,前面的小圓圈是藍色的,有錯誤就是紅色的;我們在構建專案中只是配置了掃描程式碼,其中裡面呼叫了sonarqube scanner外掛;從上面的結果可以看到,比之前構建專案時,後面多了一個sonar的圖示,我們可以點選此圖示跳轉到對應的sonarqube上檢視掃描的結果;
檢視構建日誌
提示:從構建日誌中我們能夠清楚的看到先是克隆程式碼到本地目錄,然後再是使用jenkins外掛下載sonarqube_scanner,然後sonar-scanner進行程式碼掃描;