由於工作的關係,時常需要和源碼檢測工具神鬼交鋒一下,持續整合之路上也有源碼檢測的探險,累積幾家客戶的要求,半數是以Fortify SCA(Source Code Analyzer)作為檢測工具,也寫筆記留給同事及以後的自己參考。
Fortify 安裝及組態
Jenkins 要和fortify整合有許多方式,不過我們想單純掃描並產生客製的報表,再加上也有計畫轉到Gitlab CI,所以就不嘗試cloud版的Fortify或是將掃描結果FPR上傳的Fortify 360,先維持以CLI為主的方式。所以,以下的plugin都沒安裝:
確認Fortify執行檔路徑
(1)CI Server或是Slave Server有獨立安裝好fortify SCA,應該可以在program files目錄下找到sourceanalyzer.exe及ReportGenerator.bat執行檔
確認Visual Studio執行檔路徑
(2)另外,我們也將透過Visual Studio translate .NET程式碼,所以也一起確認執行檔位置。
確認好fortify及Visual 執行檔之後,我們就可以Config CI Job,執行源碼檢測。
Config CI Job
新增CI JOB時,在建置階段使用MSBuild先建置
建置後就可以開始掃描了,我們把源碼檢測分成3個步驟,
- 1.首先是透過Visual Studio translate,然後執行掃描,產生.FPR報表檔案。
- 2.讀取.FPR報表檔產生成pdf報表。
- 3.透過email寄出pdf報表檔。
(1).首先是透過Visual Studio translate,然後執行掃描,產生.FPR報表檔案
在建置步驟上新增 執行Windows批次指令。
在第一個執行windows批次指令區塊輸入以下指令:
REM ###########################################################################
set SCA="E:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\bin\sourceanalyzer.exe"
set RPT="E:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\bin\ReportGenerator.bat"
set FPR="E:\Program Files (x86)\Jenkins\workspace\Log\FortifyLog.fpr"
set DEV="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe"
set SLN="E:\Program Files (x86)\Jenkins\workspace\Log\Log.sln"
echo Build %time%
%SCA% -b Log %DEV% %SLN% /REBUILD debug
echo ScanStart %time%
%SCA% -b Log -scan -mt -f %FPR%
echo ScanFinished %time%
(2)讀取.FPR報表檔產生成pdf報表。
在建置步驟上再新增 執行第二個Windows批次指令。
也可以用Audit Workbench手動產生報表,不過上面我們先以批次檔將fortify結果檔依照報表範本產生:
1.報表範本DeveloperWorkbook.xml
2.設定產生pdf格式的報表(舊版報表的方式)
3.設定filerSet = Security Auditor View(Quick view看不出太多問題)
輸入以下指令
REM ###########################################################################
set RPT="E:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\bin\ReportGenerator.bat"
set FPR="E:\Program Files (x86)\Jenkins\workspace\Log\FortifyLog.fpr"
set PDF="E:\Program Files (x86)\Jenkins\workspace\Log\FortifyLog.pdf"
REM ###########################################################################
echo Report Generate Starting!! %time%
%RPT% -template DeveloperWorkbook.xml -format pdf -f %PDF% -source %FPR% -filterSet "Security Auditor View"
echo Report Generate Finished!! %time%
(3)透過email寄出pdf報表檔。
新增一個建置後動作 > 可編式電子郵件通知
附件上輸入*.pdf,然後選擇附上建置紀錄,最後按下儲存按鈕。
按一下右下角的Advanced Settings,按下Add Trigger選項,選Always。
分別寄送給Developers及Recipient List
馬上建置!
然後,Jenkins幫我們執行掃描後,因為Log專案比較小,過大約1分鐘,我們就能收到檢測報告了。
依照舊版template產出掃描結果,也可以設圓餅圖、長條圖等。
小結
- 也可以多個專案先產生.FPR報表檔,透過fprutility 工具作完Merge後再產生單一的報表檔。
- 如果想改報表範本,可以到安裝目錄下的C:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\Core\config\reports\ 複製DeveloperWorkbook.xml出來修改。
- 如果在進行掃描時有遇到Unable to load build session with ID,可以試試先用Visual Studio plugin先編譯及掃描1次。
- 掃描很吃cpu,建議安排在Jenkins slave server執行。
參考
HPE SCA Guide
HP Fortify Static Code Analyzer Utilities