文档章节

Jenkins CI 自动构建与 C-STAT 代码分析的集成

Jenkins中文社区
 Jenkins中文社区
发布于 2019/11/19 09:41
字数 1354
阅读 36
收藏 0

本文首发于:Jenkins 中文社区

原文链接    作者:Sankara M

译者:wenjunzhangp

cover

介绍 

我们大多数人都知道,为嵌入式软件设置 CI/CD 总是有局限性或挑战性的,并且我们还看到在某些情况下仍然没有其他可用的选择,这会导致工作量加大和代码质量缺失。

在本文中,我们将看到一个这样的嵌入式开发工具(IAR 嵌入式工作台),以及如何将 C-STAT 静态代码分析与持续集成版本 Jenkins 集成在一起,以及如何通过自动构建。

先决条件:

a. IAR 嵌入式工作台 IDE b. C-STAT 许可证 c. Jenkins 安装

IAR 嵌入式工作台工具为我们提供了命令行执行选项,以实现 IAR 项目的静态代码分析。现在,我们将了解其工作原理。

IAR 命令行应用程序 

IAR 系统为我们提供了一个名为 IarBuild.exe 的应用程序,该应用程序用于在命令行中执行分析。您可以在安装路径中找到 IarBuild.exe 应用程序,如下所示。

C:\Program Files (x86) \IAR Systems\Embedded Workbench 8.1\common\bin\

运行代码分析:

首先切换到命令路径中的上述路径,然后执行以下命令来分析整个项目。

IarBuild.exe D:\sample\project\setup\sample.ewp -cstat_analyze Debug

  • D:\sample\project\setup\sample.ewp 是您的 IAR 项目文件路径
  • -cstat_analyze 是要执行分析的命令
  • 设置项目模式为 Debug

通过执行上述命令,它将对整个项目执行静态代码分析,并且结果将存储在 cproject.db 文件中,位于路径 ...project\setup\Debug\Obj\ 下。

注意下次运行代码分析时,如果自上次分析以来对源代码文件进行了任何更改,则必须首先清除数据库,以避免由于数据库文件中的新旧数据混合而引起的问题。

清晰的分析结果

要使用命令行清除数据库文件,请执行以下命令,

IarBuild.exe D:\sample\project\setup\sample.ewp -cstat_clean Debug

生成报告

要生成报告,我们可以使用 IAR 提供的 IREPORT 工具,您可以在同一安装目录中找到该工具。IREPORT 工具用于生成 C-STAT 执行的先前代码分析的 HTML 报告。

该报告以数字和表格形式展示统计数据。可以生成两种不同类型的报告:

  • 具有相关信息的大纲,例如有关在项目范围内启用的检查、消息总数、已取消的检查(如果有)、每个检查的消息等信息。
  • 完整的报告,其中包含诸如轮廓之类的常量信息,以及在报告结束时有关所有已抑制和未抑制消息的其他信息。表格可以折叠和展开,列可以排序

要生成完整的 HTML 报告,我们可以执行以下命令,

ireport.exe --db D:\sample\project\setup\Debug\Obj\cstat.db --project D:\sample\project \setup\sample.ewp --full --output D:\sample\result.html

上面的命令包含四个参数:

--db 指定报告所基于的数据库文件的路径。 --project 指定项目文件。 --full 生成完整报告,其中包含有关禁止检查和非禁止检查的信息。 --output 指定输出结果文件的名称。

将 C-STAT 与 Jenkins CI 构建集成: 

没有直接的插件或方法可用于将此 CSTAT 集成到任何 CI 工具。但是我们可以通过以下方法实现自定义集成。

现在我们知道了用于分析、清理、生成报告文件的命令。使用这些命令,我们可以轻松地编写批处理脚本文件 (.bat) 文件,然后在 Jenkins 中调用此批处理文件,作为预构建命令执行步骤。

设置阈值网关

我们将遇到需要通过设置“低”、“中”、和“高”问题的阈值在 CI 构建中定义网关的场景。如果该值大于设定值,则可以使构建失败。

默认情况下,C-STAT 不向我们提供设置此值的选项。但是我们可以使用以下自定义脚本来实现此目的。

我们可以获得包含低、中、高问题计数分析结果的 HTML 报告。这些值以格式 data: [0-9, 0-9 ,0-9] 在 HTML 结果文件中展现。

请参阅下面的脚本,了解我是如何在一个变量中获取这些值,然后用 sea t 阈值进行验证。

sea-t

Jenkins 构建结果

下面是 Jenkins CI 构建日志,供您参考。您可以看到由于标识为“中优先级”的 19 个问题而导致构建失败。

CI-log

结论 

经过上面的分析,我们已经了解了如何使用 Jenkins CI 构建自动化 C-STAT 分析,以及如何设置阈值网关来确定构建状态。我希望此博客对那些使用 IAR 嵌入式工作台并希望使用您的 CI 构建系统自动执行 C-STAT 的人有所帮助。

© 著作权归作者所有

Jenkins中文社区

Jenkins中文社区

粉丝 82
博文 83
码字总数 121318
作品 2
海淀
私信 提问
加载中

评论(0)

使用Gitlab和Gitlab CI做持续集成(理论篇)

持续集成是一种软件开发实践。 在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误...

donhui
2016/07/25
5.7K
11
Jenkins系列一:安装和简单配置

软件的持续集成工具之一,易上手,功能强大,话不多说,干货奉上。 我的博客地址:http://blog.lzoro.com 求关注~ Jenkins简单介绍 Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平...

格子zoro
2017/08/17
0
0
使用 Jenkins 构建 Coding 项目 (资源)

Jenkins简介 Jenkins是一种跨平台的持续集成和交付的应用软件,它便于不断稳定地交付新的软件版本,并提高你的工作效率。这款开发运维工具还让开发人员更容易把项目的变化整合起来,并使用大...

寰宇01
2018/04/23
738
0
Jenkins入门系列之——01第一章 Jenkins是什么?

第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎。 主要用于: l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。 Jenkins拥有的特性包括: l 易于安装-只要把jen...

雨飞飞
2016/02/26
87
0
6.2、 产品经理甩锅指南-CI环境

上次在这里提到了敏捷开发scrum,6、产品经理和包工头的故事,敏捷开发背景下,还有CI(持续集成)环境,持续交付和持续部署。 小奈:今天捅了个篓子,我只是叫开发,修改个导航栏而已。 也测试...

产品经理的技术课堂
2018/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

直播报名 | Service Mesh技术实践分享

近年来,云原生(Cloud Native)逐渐成为一个技术领域内的流行语,热度居高不下。企业正在加速拥抱云原生架构,以此缩短产品发布周期、敏捷响应市场需求,继而从云计算服务中提炼新的价值和技...

百度开发者中心
8分钟前
41
0
Qt 实现QTableView单元格多按钮效果

实现效果预览: 思路: 使用Qt的委托类独自渲染表格的某一列,如上图字段2的那一列。该一个单元格放入多个按钮,重写 QStyledItemDelegate 委托类 paint 方法即可实现上图效果。 代码: 委托...

剑是SR剑
10分钟前
33
0
第一章 引子--总结

1.开发过程中对公共、通用的素材做好沉淀。 2.厚平台、薄应用:理解是底层较多的基础公共平台、薄应用 最上层的应用,具体实现 3.烟卤式系统建设:一个业务一个系统,比如天猫和淘宝,开始是...

zxx901221
21分钟前
35
0
利用docker来部署go应用程序

利用docker实现go程序的快速部署 最近很长一段时间一直通过各种渠道去了解国内外有关devops方面的实践,感受很多的知识点都特别的分散,所以想通过系统的整理来巩固相应的知识体系。接下来会...

罗布V
41分钟前
43
0
【剑指Offer】二叉树——二叉查找树

package cn.dzp.flyroc.offer;import java.util.Arrays;public class VerifySquenceOfBSTDemo { /*题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结...

大数据健身侠
47分钟前
67
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部