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进行代码风格及静态代码检测的更多相关文章

  1. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  2. 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例

    Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...

  3. Java:构造代码块,静态代码块

    本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可 ...

  4. java-代码块-局部代码块、构造代码块、静态代码块

    1.代码块概述: 在Java中,使用{ }括起来的代码被称为代码块. 2.代码块分类: 根据其位置和声明的不同,可以分为局部代码块,构造代码块.静态代码块和同步代码块(多线程). 3.常见代码块的应用 ...

  5. java 代码块,静态代码块,构造器等的执行顺序

    写了一段测试代码,如下: public class ExecutionSequence extends fatherClass{    static{        System.out.printl ...

  6. Java 代码块:静态代码块、构造代码块、构造函数块

    Class : StaticFa package edu.bai.du.lime.staticCode; public class StaticFa { // 随着类的声明而执行 static { S ...

  7. Java非静态代码块和静态代码块

    类中存在两种特殊的代码块,即非静态代码块和静态代码块,前者是直接由 { } 括起来的代码,而后者是由 static{ } 括起来的代码. 非静态代码块在类初始化创建实例时,将会被提取到类的构造器中执行 ...

  8. 牛客网Java刷题知识点之代码块(局部代码快、构造代码块、静态代码块)

    不多说,直接上干货! 代码块包括局部代码快.构造代码块.静态代码块. 代码块,就是一段独立的代码空间. 1.局部代码快 对局部变量的生命周期进行控制. 2.构造代码块 对所有对象进行初始化. 3.静态 ...

  9. 2.java中c#中statc 静态调用不同之处、c#的静态构造函数和java中的构造代码块、静态代码块

    1.java和c#静态成员调用的不同之处 static 表示静态的,也就是共享资源,它是在类加载的时候就创建了 java中   可以通过实例来调用,也可以通过类名.成员名来调用,但是一般最好使用类名. ...

随机推荐

  1. libevent环境搭建

    环境 VS2017.ubuntu16.04  官网网址:http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libevent.html 下载 ...

  2. windows 抓hash获取管理员密码

    webshell 找能执行权限的目录上传 C:\Windows\System32\config\sam 内有windows 密码 利用工具把密码抓出来 samcopy 直接抓取 GetHASHES.e ...

  3. 02 Node.js学习笔记之http服务

    在Node中可以非常轻松的构建一个Web服务器,在Node中提供了一个http模块,这个模块主要功能就是帮助你创建一个Web服务器. 创建步骤: //1.加载http模块 var http=requi ...

  4. 利用Tampermonkey(油猴)+IDM实现百度云盘大文件下载;

    1.浏览器的脚本选择: 说明:不同的浏览器安装的名称不一样,这里采用Firefox做测试,同样可按照以下列表对应下载: Chrome:Tampermonkey 或 Violent monkey Fir ...

  5. Apache常见配置

      一.yum安装与配置 1.1安装: [root@apache ~]# yum install http\* -y [root@apache ~]# echo "test01" ...

  6. Shiro learning - 入门案例(2)

    Shiro小案例 在上篇Shiro入门学习中说到了Shiro可以完成认证,授权等流程.在学习认证流程之前,我们应该先入门一个Shiro小案例. 创建一个java maven项目 <?xml ve ...

  7. fenby C语言 P32

    a[0] a[0][0] a[0][1] a[0][2] a[1] a[1][0] a[1][1] a[1][2]//一维数组 int a[2][3]//二维数组int (*p)[3]=a; #inc ...

  8. 用Python编写简单的发红包程序和计算器原理

    用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...

  9. Hibernate---快速入门

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可 ...

  10. 《吊打面试官》系列-Redis基础

    你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...