CI构建pipelines

目录

  • 构建
  • 代码风格
  • 代码覆盖率
  • 静态检测

CI构建可以分为几个部分:构建代码(可以是多个平台)——>UT用例 ——> 代码覆盖率 ——> 代码静态检测
首先保证有可以CMakeLists.txt可以在本地正常编译业务代码和UT代码

构建

首先需要有ci构建的配置文件,以gitlab为例,需要.gitlab-ci.yml的配置文件,内容和格式如下:

image: makeappdev/cpp-dev # Docker image available at https://hub.docker.comstages:                        # 配置pipeline的阶段- build                      # 阶段1: 构建- test                       # 阶段2: 测试code_build:                    # 一个单一job的pipelinestage: build                 # Stage of the jobscript:                      # Main step of the job- cmake -H. -Bbuild        # 创建build目录,并运行生成cmake文件- cmake --build ./build    # 运行cmake进行编译- make test                # 运行所有unit test

cmake的具体命令如指定编译线程数等,可以在CMake之命令行中查看

配置这个yml之后gitlab可以运行pipeline了。

代码风格

代码风格可以使用clang-format检查。

  1. 首先安装clang-format工具:sudo apt install clang-format
  2. 编写 .clang-format文件:
---
Language:        Cpp
# BasedOnStyle:  Google
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands:   true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:   AfterClass:      falseAfterControlStatement: falseAfterEnum:       falseAfterFunction:   falseAfterNamespace:  falseAfterObjCDeclaration: falseAfterStruct:     falseAfterUnion:      falseAfterExternBlock: falseBeforeCatch:     falseBeforeElse:      falseIndentBraces:    falseSplitEmptyFunction: trueSplitEmptyRecord: trueSplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
# BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit:     80
CommentPragmas:  '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat:   false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:   - foreach- Q_FOREACH- BOOST_FOREACH
IncludeBlocks:   Preserve
IncludeCategories: - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'Priority:        2- Regex:           '^(<|"(gtest|gmock|isl|json)/)'Priority:        3- Regex:           '.*'Priority:        1
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth:     2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd:   ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
ReflowComments:  true
SortIncludes:    true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles:  false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard:        Latest
TabWidth:        8
UseTab:          Never
...
indent_columns: 2
...

这个配置样式定义了很多选项如缩进宽度,换行规则,空格的使用等等。可以针对自己的需求进行修改。

代码覆盖率

  1. 首先需要安装lcov或gcov工具:sudo apt install lcov;要确保它们可以在执行 cmake 时被找到。
  2. 代码根目录下新创建cmake目录,把CodeCoverage.cmake放到该目录下,CodeCoverage.cmake是用于配置 CMake 以收集代码覆盖率的模块
  3. 在CMakeLists.txt中新增查找和包含CodeCoverage.cmke的代码:
# CMakeLists.txt
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
include(CodeCoverage)

这是CodeCoverage.cmake的一个示例,可以根据需要进行修改

  1. 在ci的yml文件最后加上对覆盖率的检测:
mkdir ccov        # 创建ccov用于存放生成的文件
make coverage     # 覆盖率检测

静态检测

  1. 首先需要安装clang-tidy工具:sudo apt install clang-tidy。Clang-Tidy 工具是一个非常强大的C++静态分析工具
  2. 同代码覆盖率一样,将ClangTidy.cmake放到cmake目录下
  3. 在CMakeLists.txt中新增一行 include(ClangTidy)
  4. 在根目录下放静态检测的.clang-tidy文件。
  5. 运行 CMake 或make 进行编译,Clang-Tidy 会在编译时运行

clang-tidy的内容大概如下:

---
Checks:          '-*,readability-*'
WarningsAsErrors: ''
HeaderFilterRegex: ''
AnalyzeTemporaryDtors: false
FormatStyle:     none
User:            user
CheckOptions:    - key:             readability-identifier-naming.NamespaceCase value:           lower_case - key:             readability-identifier-naming.ClassCase value:           CamelCase  
...

在上述配置中:

Checks: 这一行定义了你想要运行的检查。在这个例子中,它会禁用所有检查(-*),然后仅启用 readability-* 系列的检查。
WarningsAsErrors: 如果这里列出了任何检查,那么这些检查的警告将被视为错误。
HeaderFilterRegex: 定义一个正则表达式,仅分析与此表达式匹配的头文件。
AnalyzeTemporaryDtors: 定义是否分析临时析构函数。
FormatStyle: 定义代码格式化样式。none 表示不进行代码格式化。
User: 定义用户
CheckOptions: 用于为特定检查指定选项。这里的例子中,它改变了命名约定规则,要求命名空间全部小写,类名使用驼峰命名。
你可以检查 Clang-Tidy 的文档以获取更多信息和更多可用的检查:http://clang.llvm.org/extra/clang-tidy/

使用 .clang-tidy 文件可以帮助保持项目中的代码质量和一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习专题:强化学习知识梳理(一)

2024/6/23&#xff1a; 前段时间有幸完成了大学期间的第一篇论文。在面试之前复盘一下关于自己论文中DQN的一些相关点。 浅谈主要区别&#xff08;在线 or 离线&#xff09; 首先&#xff0c;一切的开始是强化学习中时序差分方程&#xff0c;这体现了强化学习方法的优化策略。在…

JAVAEE之网络原理_传输控制协议(TCP)的滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答机制

前言 在前面几节&#xff0c;我们讲解了TCP协议的基本概念、报文格式。还介绍了确认应答机制、超时重传、连接管理机制&#xff0c;在本节中 我们将会继续介绍TCP协议的其他机制。 一、滑动窗口机制&#xff08;效率机制&#xff09; 在前面的章节中我们讨论了确认应答策略&…

二、Docker常用命令

一、帮助启动类命令 1、启动docker [rootlocalhost ~]# systemctl start docker 2、停止docker [rootlocalhost ~]# systemctl stop docker 3、重启docker [rootlocalhost ~]# systemctl stop docker 4、查看docker状态 [rootlocalhost ~]# systemctl status docker 5、开机自…

springboot微信点餐小程序-计算机毕业设计源码82910

目 录 摘要 1 绪论 1.1 项目开发背景 1.2目的和意义 1.3springboot框架介绍 2 微信点餐小程序系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 …

Transformer的诞生和崛起

智能问答与文本生成&#xff1a;Transformer模型的超能力 ©作者|wy 来源|神州问学 一、引言 NLP&#xff08;自然语言处理&#xff09;作为人工智能领域的一个重要分支&#xff0c;致力于使计算机能够理解和处理人类语言。随着互联网的发展和信息时代的到来&#xff0c;…

开发查询订单信息fastGPT智能体工作流 将工作流接入到人工客服系统

我在抖音上发布了视频 https://www.douyin.com/video/7382446337482099977 下面是主要内容介绍 【视频标题&#xff1a;】开发查询订单信息fastGPT智能体工作流 将工作流接入到人工客服系统 #智能体 #FastGPT #客服系统-----------【视频行业分类&#xff1a;】<3C数码>-…

通过自定义注解+AOP的处理方式实现权限控制

通过自定义注解AOP切面的方式&#xff0c;可以实现日志记录、权限控制、性能监控、事务管理、缓存管理、异常处理等功能&#xff0c;以下以权限控制为例&#xff0c;介绍一下自定义注解AOP处理方式的使用。 步骤1&#xff1a;定义注解 用于标记需要权限校验的方法 package com.…

蔡依林与彭于晏那些被时光珍藏的甜蜜

蔡依林与彭于晏&#xff1a;那些被时光珍藏的甜蜜近日&#xff0c;一段尘封已久的往事再次被翻出&#xff0c;人们再次关注起这对曾经的“金童玉女”——蔡依林与彭于晏。据台媒报道&#xff0c;他们曾有过一段鲜为人知的恋情&#xff0c;这一消息无疑让粉丝们激动不已&#xf…

示波器探头口碑性价比好的品牌有哪些推荐

示波器探头作为测试测量设备中的重要组成部分&#xff0c;市场上存在多个知名品牌。以下是一些主要的示波器探头品牌及其相关信息&#xff1a; Pintech品致&#xff1a;作为全球示波器探头第一品牌&#xff0c;Pintech品致是示波器探头技术标准倡导者&#xff0c;以及“两点浮…

常见网络攻击威胁分享

今天我来分享一下比较常见的网络攻击形式&#xff0c; ARP 欺骗攻击、CC 攻击和 DDoS 流量攻击是较为常见且危害巨大的攻击方式。 一、ARP欺骗攻击 ARP&#xff08;AddressResolutionProtocol&#xff0c;地址解析协议&#xff09;是用于将IP地址转换为MAC地址的协议。ARP欺骗…

【杂记-浅谈OSPF协议之IR、ABR、ASBR、BR】

OSPF协议之IR、ABR、ASBR、BR 一、 内部路由器 IR二、骨干路由器 BR三、边界路由器 ABR四、自治系统边界路由器 ASBR 一、 内部路由器 IR 概念 IR&#xff0c;Internal Router&#xff0c;即内部路由器&#xff0c;指的是所有接口都属于同一个OSPF区域的路由器。这类路由器只维…

每天一个数据分析题(三百八十八)- 线性回归模型

以下不适合对线性回归模型进行评估的指标是&#xff1a; A. 残差平方和 B. F1 score C. 均方误差 D. 判定系数 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&#xff0c;SQL&#xff0c;统计…

《A++ 敏捷开发》- 25A 北京手记

北京是全国文化之都&#xff0c;来到北京晚上有空便去欣赏各类表演节目。连续3晚&#xff1a;听了一场音乐会&#xff0c;看了两套话剧。 国家大剧院管弦乐团演奏马勒第三交响曲 到了最后第六乐章的最后5分钟&#xff0c;两位定音鼓手同步咚、咚、咚、咚&#xff0c;像为步兵…

CCSK认证考试详解:内容、形式、费用及备考指南

CCSK认证考试&#xff0c;也称为CCSK考试&#xff0c;是关于云计算安全的专业认证&#xff0c;由国际云安全联盟&#xff08;Cloud Security Alliance, CSA&#xff09;推出。以下是关于CCSK认证考试的详细信息&#xff1a; 考试内容 CCSK考试内容涵盖了云安全的基础知识&…

Linux命令学习2

一.文件基础命令 1.alias-给某个命令取别名 使用方式&#xff1a;alias cl ls -la 说明&#xff1a;将ls -la命令取别名为cl,使用这种方式只是临时将命令取别名&#xff0c;重启中断后&#xff0c;就会失效。 问题1&#xff1a;如何永久性的设置命令的别名&#xff1f; 答…

找不到x3daudio1_7.dll无法运行的原因分析及6种解决方法

当您遇到软件或游戏中提示“x3daudio1_7.dll丢失”的问题时&#xff0c;通常意味着您的系统中缺少这个特定的动态链接库文件。x3daudio1_7.dll 是微软DirectX的一部分&#xff0c;找不到x3daudio1_7.dll会导致软件游戏无法启动运行&#xff0c;下面小编就分享几种靠谱的解决方法…

saas产品运营案例 | 联盟营销计划如何帮助企业提高销售额?

在当今数字化时代&#xff0c;SaaS&#xff08;软件即服务&#xff09;产品已成为企业提高效率、降低成本的重要工具。然而&#xff0c;面对激烈的市场竞争&#xff0c;如何有效地推广SaaS产品、提高销售额&#xff0c;成为许多企业面临的挑战。林叔将以ClickFunnels为例&#…

Linux_应用篇(22) 音频应用编程

ALPHA I.MX6U 开发板支持音频&#xff0c;板上搭载了音频编解码芯片 WM8960&#xff0c;支持播放以及录音功能&#xff01;本章我们来学习 Linux 下的音频应用编程&#xff0c; 音频应用编程相比于前面几个章节所介绍的内容、 其难度有所上升&#xff0c; 但是笔者仅向大家介绍…

vue 颜色选择器

在 Vue 中实现颜色选择器&#xff0c;可以采用几种不同的方法&#xff0c;这里提供两个常见实现方式&#xff1a; 方法1&#xff1a;使用 HTML 内置的 <input type"color"> Vue 自然支持原生的 HTML 颜色输入元素&#xff0c;这是一个快速且简单的方式来集成颜…

【2024最新版】Windows11 23H2中文家庭版:免费下载!

Windows 11 23H2中文家庭版系统拥有稳定的性能、丰富的功能和卓越的安全性&#xff0c;很多用户都喜欢给自己的电脑安装上这个版本。但是&#xff0c;许多新手用户不清楚在哪里才能下载到Windows11家庭版&#xff1f;接下来小编给大家带来2024年最新的Windows 11 23H2中文家庭版…