GitLab SAST:如何將Klocwork與GitLab一起使用

創提科技
2022/06/20

分享到

GitLab SAST是GitLab和Klocwork的結合,GitLab是一種覆蓋了整個DevOps生命週期的集成解決方案,Klocwork是一個靜態程式碼分析和應用安全靜態測試(SAST)工具。當將這兩個工具一起使用時,可以為軟體發展團隊提供一個強大的GitLab SAST解決方案。這裡,我們將闡明GitLab SAST的優勢。


本文將包含如下幾個部分:
 
     • GitLab是什麼?
 
     • 為什麼GitLab用戶應該使用Klocwork
 
     • 如何使用GitLab和Klocwork
 
     • 如何設置GitLab SAST
 
     • GitLab SAST看起來怎麼樣


GitLab是什麼?
 
GitLab是一個基於web的DevOps生命週期工具,它為wiki、問題跟蹤和CI/CD Pipeline功能提供了一個Git存儲庫管理器。它由Gitlab Inc.開發,於2011年發佈。
 
軟體發展團隊已經使用GitLab來統一開發人員的工作流程,並縮短DevOps週期時間——這使他們能夠開發出更高品質的軟體。
 
GitLab被來自各行各業的軟體發展團隊所使用,這些行業包括航空航太和國防、汽車、醫療設備以及視頻遊戲開發等。


為什麼GitLab用戶應該使用Klocwork
 
GitLab是一個流行的DevOps生命週期工具,因為它縮短了週期時間,降低了工程風險,説明確保了應用程式更安全,並連接了緩衝器和工作臺。因此,許多開發人員也使用像Klocwork這樣的靜態應用程式安全測試(SAST)工具來對GitLab進行補充是有道理的。


Klocwork如何對GitLab進行補充
 
Klocwork是一個靜態程式碼分析和SAST工具,它被設計用來優化諸如CI/CD Pipeline之類的DevSecOps流程。


差異分析
 
通過使用來自伺服器的系統上下文資料,Klocwork能夠只分析已更改的檔,同時提供差異分析(Differential Analysis)結果,就像對整個系統進行了分析一樣。這盡可能地縮短了您分析新程式碼和已更改程式碼的時間。


集成分析
 
通過使用來自伺服器的系統上下文資料,Klocwork能夠對您軟體專案當前的健康狀況進行快照。在每次集成分析(Integrated Analysis)之後,Klocwork會提供一個列表(列出檢測到的編碼問題),以及關於程式碼的其他報告。通過定期運行集成分析(Integrated Analysis),您能夠提高程式碼的品質,確保程式碼庫的一致性。


如何使用GitLab和Klocwork
 
由於Klocwork提供了一個命令列介面和靈活的工具來適應大多數工作流程,因此有很多方法可以將Klocwork的靜態分析工具集成到像GitLab這樣的持續集成系統中。這裡列舉的一個例子是如何使用開發人員的程式碼版本分支,將Klocwork集成到DevSecOps工作流程中。

GitLab SAST:如何将Klocwork与GitLab一起使用-1.jpg

上圖設計的工作流程簡單地展示了:開發人員如何創建各自的程式碼版本分支,以開發新的功能或解決已知的缺陷。一旦解決了新功能或bug,程式碼就會合並到主分支中,準備發佈。
 
通過Klocwork的工具,您可以使用集成分析(Integration Analysis)工具在程式碼庫中創建已知問題的基線。然後,這些結果通過web門戶對所有人可見,並可以推遲到更晚的日期或被分配去修復。這個集成分析還提供了差異分析所用的完整的專案上下文和現有的問題資料。
 
有了差異分析(Differential Analysis),現在可以在伺服器端檢查開發人員是否提交了新的缺陷,並且如果程式碼版本分支被合併,是否會增加專案的技術債務。
 
然後,對其進行配置,可以通過GitLab向開發人員提供回饋:他們的提交包含了新的缺陷,因為他們新開發的程式碼不符合預設的品質檢驗標準(比如,無新的缺陷)。


如何設置GitLab SAST
 
下面是關於如何設置GitLab SAST的詳細步驟說明:


1.安裝GitLab
 
首先,您需要安裝GitLab。如果您已經安裝了,請跳到下一步。
 
安裝GitLab:
 
    1. 去about.gitlab.com上點擊安裝GitLab
 
    2. 選擇您喜歡的GitLab Omnibus包。
 
    3. 安裝和配置必要的依賴項。
 
    4. 添加GitLab包存儲庫並安裝該包。
 
    5. 流覽主機名稱並登錄。
 
    6. 設置您的溝通偏好。
 
    7. 發佈GitLab。


2. 安裝Klocwork
 
接下來,您將下載Klocwork
 
如果您還沒有使用Klocwork,您可以開始免費試用。
 
如果您已經是Klocwork的用戶,請下載最新版本。


3. 配置GitLab運行腳本
 
運行腳本需要配置Klocwork分析將在哪裡進行,可以通過ssh連接到現有的機器,也可以通過配置Klocwork的docker鏡像來實現。
 
Klocwork為差異分析和集成分析提供了分析工具包,這意味著通過複製和解壓縮工具包可以很容易地將其部署到機器上。
 
還應該為該運行腳本配置一個標記,以確定該運行腳本能夠進行Klocwork分析,然後可以在工作步驟中使用該標記。在本文的這些示例中,已經使用了‘klocwork’標記。


4. Klocwork集成分析
 
集成分析提供了現有問題的基線、完整的項目上下文、web門戶的健康狀況概述以及趨勢。它是Klocwork分析的主幹,在這個例子中,我們將它配置為只在提交到主分支上運行,假定工作流程應該來自於提交觸發。
 
為專案編輯“.gitlab-ci.yml” :

GitLab SAST:如何将Klocwork与GitLab一起使用-2.jpg

 在Klocwork伺服器和相關專案的檔中引入變數可以簡化配置。

GitLab SAST:如何将Klocwork与GitLab一起使用-3.jpg

 集成分析(Integration Analysis)是基於命令列的,這裡它被過濾了,只作為測試階段的一部分在主分支上運行。使用的捕獲、分析和載入流程與往常一樣,但是有一個更改:使用提交引用作為Klocwork基線構建的名稱。這在之後的差異分析中也會被用作參考。


5. Klocwork差異分析
 
隨著集成分析的執行,而且專案中至少有一個可用的基線,現在不需要先前的本地分析資料就可以快速地對程式碼變更進行分析。
 

GitLab SAST:如何将Klocwork与GitLab一起使用-4.jpg

在專案的同一個yml檔中,還可以配置差異分析(Differential Analysis)。這一次在除了主分支(即任何開發人員的程式碼版本分支)之外的所有分支上運行,配置差異分析以運行Klocwork差異工具‘kwciagent’。所採取的步驟如下:
 
    1. 使用Klocwork的工具捕獲構建資料。
 
    2. 生成一個文字檔,該檔應該包含這個提交中已更改檔的清單,不需要任何格式(每行一個檔)。顯示的是一個git diff命令生成的示例,它需要引用diff,我們可以使用最後的基線構建名稱。
 
    3. 使用‘kwciagent create’為Klocwork創建一個本地工作區。
 
    4. 運行分析,但是它被過濾只在更改的檔上運行,繞過作為參數的diff列表文字檔。
 
    5. 還可以為檢測到的‘新’問題(如果有的話)創建一個工件,這裡是創建一個xml。
 
    6. 通過檢查工件的問題閾值,也可能導致CI運行失敗。在這個例子中,如果存在任何新問題,就會導致CI運行失敗。


GitLab SAST看起來怎麼樣
 
隨著程式碼版本分支的創建和拉取請求的提交,您將可以獲得分析運行的概況:

GitLab SAST:如何将Klocwork与GitLab一起使用-5.jpg

在上述的差異分析(Differential Analysis)中,請注意:由於與基線相關的程式碼引入了新的問題,運行被標記為失敗。它還通過打勾和交叉顯示:它在第二階段失敗了,這在當前的例子中意味著構建是成功的,但測試階段失敗了。

GitLab SAST:如何将Klocwork与GitLab一起使用-6.jpg

在拉取請求中,現在可以查看在開發功能分支中的構建測試過程是否成功,並提供關於合併的警告。
 
還請注意:在配置過程中,它被配置為存檔diff結果檔和更改列表,可以從管道運行中下載。

GitLab SAST:如何将Klocwork与GitLab一起使用-7.jpg

GitLab SAST——完整的迴圈
 
隨著拉取請求可以對合併顯示警告,使得解決缺陷並重新提交成為了可能。GitLab將自動地對新的提交運行差異分析,並更新拉取請求的狀態。

GitLab SAST:如何将Klocwork与GitLab一起使用-8.jpg

一旦合併到主分支中,一個完整的集成就會再次執行,以創建新的基線,捕獲合併所做的更改,顯示如下圖。

GitLab SAST:如何将Klocwork与GitLab一起使用-9.jpg

開始使用GitLab SAST
 
今天就開始使用GitLab和Klocwork優化您的DevSecOps流程吧。