JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

2023-10-26

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 0


cd /var/lib/jenkins/jobs/TestProjectSrc/workspace

pwd

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JenKins结合cppcheck及cpplint进行代码风格及静态代码检测 的相关文章

  • Java RSA加密解密及签名验证

    一 简介 RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥 在公开密钥密码体制中 加密密钥 即公开密钥 PK是公开信息 而解密密钥 即秘密密钥 SK是需要保密的 加密算法E和解密算法D也都是公开的 虽然解密密钥SK是由公开密钥PK决
  • opengl的纹理过滤

    和纹理映射相关的另一个重要概念是 过滤 我们已经讨论了怎样将纹理坐标 这是个0到1之间的分数 映射到纹素上 纹理贴图中纹素的坐标总是以整数定义的 但是如果纹理坐标映射到纹素上的坐标为 152 34 745 14 怎么办 不明智的方案是将这个
  • css的三种引入方式

    目录 三种引入方式 1 行内样式 2 内部样式 内嵌式 3 外部样式 3 1外链式 3 2导入式 引入方式的优先级 三种引入方式 1 行内样式 行内样式就是直接把css样式添加在HTML标签中 作为style样式的属性值
  • DDR4 设计概述以及分析仿真案例(硬件学习)

    转载 DDR4 设计概述以及分析仿真案例 硬件设计讨论 EDA365电子论坛网 引言 随着计算机 服务器的性能需求越来越高 DDR4开始应用在一些高端设计中 然而目前关于DDR4的资料非常少 尤其是针对SI 信号完整性 部分以及相关中文资料
  • ODBC 各种数据库连接串

    Overview Generally one of the first steps when you are trying to work with databases is open it You can find several typ
  • 查看及配置交换机管理地址

    查看及配置交换机管理地址 问题 交换机是目前用于组建局域网的主要设备 交换机根据MAC地址表实现数据帧的转发 通过查看MAC地址表更加有利于交换机工作原理的理解 通过查看CISCO设备邻居信息来了解网络拓扑 通过telnet方式远程访问 配
  • Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语

    在执行测试用例 细心的人都会发现 浏览器的title部分 有一句提示语 Chrome正在受到自动软件的控制 那么 能不能去掉这句提示语呢 也是没问题的 同样的 使用 headless 在浏览器中加入 disable infobars 这个参
  • pyecharts学习小总结——Bar(柱状图)、Pie(饼图)、Line(线图)、Page(页面组件)、Tab(分页组件)、Grid(组合组件)

    目录 pyecharts常用模块总结 Bar 柱状图 1 旋转x轴标签 2 添加工具箱 3 柱状图与折线图混合 4 标注x轴名称 5 设置垂直的一天时间线 6 旋转x和y轴 Pie 饼图 1 设置位置和半径大小 Line 线图 1 设置平滑
  • pip install scipy时发生zipfile.BadZipFile: File is not a zip file解决办法

    应该是下载时发生了丢包 我在官网下载时 只有14M 切换到豆瓣源有30M 附上地址 https pypi doubanio com simple scipy
  • java程序移植_java JDBC 提高程序可移植性

    介绍jdbc一般的程序 程序编程相关 jb oracle weblogic c 很多java初学者在开始接触jdbc编程的时候 在网上与大部分的教材上都是这样 推荐阅读 Java线程入门 什么是线程 import java sql 扩展信息
  • 预训练语言模型(PLMs)综述

    预训练语言模型 PLMs 内容来自AACL 2022 Tutorial https d223302 github io AACL2022 Pretrain Language Model Tutorial https d223302 gith
  • Mysql进阶索引篇02——InnoDB存储引擎的数据存储结构

    前言 前面我们已经剖析了mysql中InnoDB与MyISAM索引的数据结构 了解了B 树的设计思想 原理 并且介绍了B 树与Hash结构 平衡二叉树 AVL树 B树等的区别和实际应用场景 页和页之间并不一定在物理上相连 只是在逻辑上使用双
  • java内存

    在java视频中 一直强调java内存的重要性 如果真正理解 了java内存的分配情况和程序运行时的java内存 那么你会对 java编程的思想 会更加深刻 Java内存分配与管理是Java的核心技术之一 Java的内存分配有三种 一 静态
  • 使用WPD API操作MTP设备一些总结

    使用WPD API操作MTP设备总结 本文分为两部分 1 WPD基本架构和概念的理解 2 使用WPD API操作MTP 拷贝 删除 设备 1 WPD基本架构和概念 1 1 WPD架构 原文 https docs microsoft com
  • Vue脚手架的安装配置以及使用

    安装Vue脚手架 1 需要安装nodejs支持 去nodejs官网下载对应版本的nodejs 可以使用installer 选择安装目录点击安装 也可以使用binary文件 直接选择文件夹解压缩 安装完成后如上图所示 然后配置环境变量 1 添
  • C++中指针和应用有哪些区别?

    a 指针是一个新的变量 存储了另一个变量的地址 我们可以通过访问这个地址来修改另一个变量 引用只是一个别名 还是变量本身 对引用的任何操作就是对变量本身进行操作 以达到修改变量的目的 b 引用只有一级 而指针可以有多级 c 指针传参的时候
  • show processlist 命令执行结果解释

    show full processlist show processlist 显示哪些线程正在运行 也可以通过 INFORMATION SCHEMA PROCESSLIST 表或 mysqladmin processlit 获取这些信息 如
  • 设计模式-状态模式(State)

    文章目录 前言 状态模式的核心概念 状态模式的用途 示例 状态模式的Java实现 状态模式优缺点 总结 前言 当我们需要在对象的生命周期中管理不同状态时 状态模式 State Pattern 是一种有用的设计模式 在这篇博客中 我们将介绍状
  • 免费的 PPT 模版资源

    1 第一 PPT 第一PPT站内资源以免费下载为基础 本着开放的共享为原则 服务于国内广大国内PPT爱好者 目前第一PPT站内的所有PowerPoint资源 PPT模板 PPT背景 PPT 素材 PPT教程 PPT软件 均是免费下载 所以请

随机推荐

  • openVPN服务端搭建

    搭建步骤 云服务器 Ubuntu 20 04 1 LTS 搭建服务端 公网IP 47 215 测试客户端 部门内部成员的windows10 或者windows11 及mac电脑 还有现场linux环境 最后目标是实现所有客户端之间能够互联
  • Electron桌面程序开发入门

    1 Electron结合vue项目配置 Electron是利用web前端技术进行桌面应用开发的一套框架 是由 github 开发的开源框架 允许开发者使用 Web 技术构建跨平台的桌面应用 它的基本结构 Electron Chromium
  • Vuluhub靶场-breach1

    网络设置和准备 该靶场的ip 192 168 110 140 我们要设置为仅主机模式 在虚拟机中将仅主机模式的ip地址范围包含靶机的ip 除了网络设置 还要准备两台kali 一台连接外网 一台和靶机一样要仅主机模式 信息收集 Nmap扫描
  • lvgl 自定义控制表格行高、颜色和外框样式

    lvgl 自定义控制表格行高 颜色和外框样式 lvgl版本 8 3 7 lvgl自带表格控件能够指定列宽 但是表格行高是根据内容动态渲染的 表格自带样式如图 带有蓝色的外框和白底 如果想要手动控制表格行高 颜色和外框等属性 需要监听表格绘制
  • 国产加密实际运用:使用SM3加盐存储密码,并且使用SM2进行登录认证

    目录 1 简要 2 开发环境及工具 3 后台密码加密部分 3 1加密代码 3 2 SM3加密类 Sm3crypto 3 3国密SM3工具类 Sm3Utils 3 4国密相关依赖包 4 登录认证部分 4 1前端部分关键代码 4 2后端logi
  • 查看tensorflow是否支持GPU,以及测试程序

    测试程序 Python import tensorflow as tf hello tf constant Hello TensorFlow sess tf Session print sess run hello 是否支持GPU impo
  • 【新手入门篇】React+ant design

    本篇着重讲解如何使用官方的demo 至于React及antd的安装及配置在本文末尾会给出相应的参考链接 创建一个React项目之后 create react app 你的项目名 在新建的项目目录下引入antd组件库 yarn add ant
  • Ubuntu 23.10 支持基于 TPM 的全磁盘加密

    将于下个月发布的 Ubuntu 23 10 增加了一项实验性功能 初步支持基于 TPM 的全磁盘加密 该功能利用系统的可信平台模块 TPM 缺点是这种额外的安全性依赖于 Snaps 包括内核和 GRUB 引导加载器 Ubuntu 开发商 C
  • 输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点

    输出该单链表的中间结点的值 如果链表长度为偶数 则输出中间靠右的结点 题目要求 输入数据创建一个单链表 实现一种算法 输出该单链表的中间结点的值 如果链表长度为偶数 则输出 中间靠右 的结点 如果链表只有一个元素 则输出唯一的元素 算法思路
  • 【华为机试真题 JAVA】水果搬运问题-200

    题目描述 一组工人搬运一批水果 用一维数组存储工人编号和水果名称以及搬运重量 要求先按水果分组 然后按搬运重量排序输出 输入描述 第一行包括一个整数 N 1 N 100 代表工人的个数 接下来的 N 行每行包括两个整数 p 和 q 分别代表
  • 关于STM32的SPI使用DAM首发的回调问题

    本人第一次使用HAL库 然后用SPI操作FLAH 担心数据量大 于是打算使用DMA 之前是用的LL库 然后发现了一个问题 SPI怎么都接收不到数据 想了一下应该是片选引脚的问题 我应该在DMA传输结束时关闭引脚 但是之前都是用LL库 判断标
  • spring无侵入自动生成接口文档

    背景 spring cloud多个微服务开发了很多接口 紧急对接前端 需要快速提供一批接口的文档 且不同微服务的接口由多位同事开发且注释非常的少各有不同 现在需要不修改代码不添加注释的情况下能自动的扫描接口并生成文档 本文将详细介绍实现此需
  • X264的参考帧设置

    1 以r1884为例 r ref lt 整数 gt Reference Frame 即参考帧 决定最多可能的参考帧数 有效范围值1 16 该值越大 压缩率越高 但大于6后对压缩率的贡献很低 可以看压制完后x264 info ref 项 例如
  • sqlserver 登录名和用户名

    解释 登录名 通俗的讲 平时连接数据库是用的就是登录名 而不是用户名 是数据库服务级别 登录数据库之后 这个登录名有什么权限 比如可以访问那个数据库 或者表 存储过程 视图等 甚至字段权限 是有与之对应的用户 用户名 决定 注 也可以从服务
  • 手风琴(折叠面板)

    目录 一 Layui手风琴 1 1 引用layui的css和js 1 2 开启手风琴的代码示例 1 3 静态数据 1 4 最终效果图 二 Bootstrap手风琴 2 1 引用Bootstrap的css和js 2 2 开启手风琴的代码示例
  • Python 第一章 基础知识(6) 函数

    函数就像可以用来实现特定功能的小程序一样 Python的很多函数都能做很奇妙的事情 先来介绍一个内建函数 即是Python自带的已经定义好的函数 可以直接用 gt gt gt pow 2 3 8 这个函数实现了2 2 2的算法 这种使用函数
  • Angular 中 web worker的使用

    web worker就是在web应用程序中使用的worker 这个worker是独立于web主线程的 在后台运行的线程 web worker的优点就是可以将工作交给独立的其他线程去做 这样就不会阻塞主线程 第一步 ng g webWorke
  • 快速生成26个英文字母

    在学习中经常会拿26个英文字母序列做为字符串的例子来说明 但是自己又不想每次都自己手动输入 所以就想写个方法能快速的生成这个字符串 generate 26 english Characters return void public stat
  • C# 9.0:Records

    转自 翁智华 cnblogs com wzh2010 p 13950647 html 概述 在C 9 0下record是一个关键字 微软官方目前暂时将它翻译为记录类型 传统面向对象的编程的核心思想是一个对象有着唯一标识 封装着随时可变的状态
  • JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

    JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测 这里记录下过程 前提条件 安装了Jenkins 步骤如下 第一步 安装cppcheck并配置环