JenKins結合cppcheck及cpplint進行代碼風格及靜態代碼檢測
阿新 • • 發佈:2018-03-08
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進行代碼風格及靜態代碼檢測