1. 程式人生 > >JenKins結合cppcheck及cpplint進行代碼風格及靜態代碼檢測

JenKins結合cppcheck及cpplint進行代碼風格及靜態代碼檢測

nms blank tee col 1.7 c++ __name__ sso ==

JenKins結合cppcheck及cpplint

最近公司需要在Jenkins上安裝cppcheck及cpplint進行代碼風格及靜態代碼檢測,這裏記錄下過程。

前提條件

  • 安裝了Jenkins

步驟如下


第一步:安裝cppcheck並配置環境

通過源碼安裝

下載地址:
https://github.com/danmar/cppcheck/releases/
https://sourceforge.net/projects/cppcheck/files/cppcheck/1.77/


例如下載 1.77的版本

解壓後,進入目錄運行以下命令進行安裝

sudo make SRCDIR=build CFGDIR=/usr/share/cppcheck/
sudo make install CFGDIR
=/usr/share/cppcheck/

通過apt安裝

sudo apt-get install cppcheck

驗證

cppcheck --version

第二步:安裝cpplint並調整

因為cpplint默認只支持C++語言的風格代碼檢測,所以要修改代碼以支持c語言代碼。

下載地址: https://github.com/google/styleguide

修改代碼以支持c語言代碼

下載完後進入cpplint目錄,打開cpplint.py文件,將下面這行的代碼

_valid_extensions = set([cc, h, cpp, cu, cuh)
修改為
_valid_extensions 
= set([cc, h, cpp, cu, cuh,c])

新增代碼以支持檢測目錄

因默認的代碼只支持單個文件,所以要新增一個代碼文件來支持檢測目錄
在cpplint.py文件的同目錄下,新增一個文件cpplintdir.py,內容如下

#!/usr/bin/env python
import os
import fnmatch
import sys
def all_files(root,patterns = *, single_level = False, yield_folders=False):
    patterns = patterns.split(
;) for path, subdirs, files in os.walk(root): if yield_folders: files.extend(subdirs) files.sort() for name in files: for pattern in patterns: if fnmatch.fnmatch(name, pattern): yield os.path.join(path,name) break if single_level: break if __name__ == __main__: if len(sys.argv) < 2: print Please set the absolute path as the first parameter for parse. sys.exit() for path in all_files(sys.argv[1],*.cpp;*.h;*.c): os.system("python cpplint.py %s"%(path))

增加文件執行權限

sudo chmod +x cpplint.py
sudo chmod +x cpplintdir.py

第三步:Jenkins安裝cppcheck及Warnings Plug-in插件

因為JenKins目前沒有cpplint的插件,所以通過Warnings Plug-In來搜集cpplint的報告。

安裝cppcheck及Warnings Plug-in插件

進入Jenkins的系統管理>插件管理>可選插件

cppcheck安裝過程如下圖所示,Warnings Plug-in的過程是一樣的
技術分享圖片

第四步:Jenkins配置Jobs

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

添加以下命令

cd /var/lib/jenkins/jobs/styleguide/cpplint
python goodixlint.py /var/lib/jenkins/jobs/TestProjectSrc/workspace 2>&1 | tee cpplint-style.xml

cp cpplint-style.xml /var/lib/jenkins/jobs/TestProjectSrc/workspace/cpplint-style.xml
cd /var/lib/jenkins/jobs/TestProjectSrc/workspace
mkdir static_analysis   
cppcheck  4 --enable=all --inconclusive --xml --xml-version=2 -q ./src 2>static_analysis/src-cppcheck.xml
exit
cd /var/lib/jenkins/jobs/TestProjectSrc/workspace
pwd

例子:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

JenKins結合cppcheck及cpplint進行代碼風格及靜態代碼檢測