如何在GitLab CI的Code Quality中添加clang-format编码风格校验?
GitLab CI 新增编码风格校验实现方案
你已经在使用clang-format做代码格式化,直接基于现有工具扩展规则,集成到已有的Code Quality流程即可,不需要引入额外的复杂工具。
1. 完善编码规则配置
首先在项目根目录维护规则配置文件,保证本地开发和CI校验的规则完全一致:
- 缩进、换行、括号风格这类格式规则直接在
.clang-format中定义,直接配置IndentWidth、TabWidth、ColumnLimit等参数即可 - 变量名前缀这类命名规则,clang-format 14及以上版本支持
VariablePrefix、MemberVariablePrefix、ParameterPrefix等参数,直接填入你要求的前缀(比如成员变量前缀m_)即可 - 如果使用的clang-format版本低于14,不支持命名规则校验,可以搭配
.clang-tidy配置,开启readability-identifier-naming检查项自定义命名规则
将配置好的.clang-format/.clang-tidy提交到项目根目录即可。
2. 调整.gitlab-ci.yml配置
直接在你现有的Code Quality job中新增校验步骤即可,不需要单独新建流水线阶段,示例配置如下:
code_quality: # 复用你原有Code Quality的阶段,一般为test或codequality stage: codequality # 可直接使用预装clang的镜像,避免每次CI运行都安装依赖 image: silkeh/clang:16 before_script: # 若使用基础镜像需要提前安装clang、git依赖,用上面的预装clang镜像可省略此步 # - apt update && apt install -y git clang script: # 保留你原有变量作用域检测的执行命令,不要修改 - <替换为你原有变量作用域检测的执行命令> # 新增clang-format编码风格校验 - | # 全量校验所有cpp、h文件,可根据你的项目调整匹配的文件后缀 find . -type f \( -name "*.cpp" -o -name "*.h" \) | xargs clang-format --dry-run --Werror # 若只需要校验本次提交修改的文件,节省CI运行时间,可替换为下面的命令 # git diff --name-only HEAD~1 HEAD | grep -E "\.(cpp|h)$" | xargs clang-format --dry-run --Werror artifacts: # 保留原有GitLab Code Quality报告配置即可 reports: codequality: gl-code-quality-report.json # 触发规则和你原有配置保持一致即可,示例为仅主分支推送和合并请求时触发 only: - main - merge_requests
- 参数
--Werror会将所有不符合规范的问题判定为错误,直接阻断CI运行,强制开发者修改后才能合并代码 - 如果不需要强制阻断,仅需要在合并请求页展示风格问题,可以去掉
--Werror,添加对应的格式转换脚本,将clang-format的输出转换为GitLab Code Quality支持的报告格式即可。
3. 验证配置生效
提交配置文件到测试分支,推送包含不符合规范代码的合并请求:
- 查看CI的code_quality job是否能正常识别不符合规范的代码
- 查看合并请求的「Code Quality」标签页是否正常展示风格问题
- 后续规则调整仅需要修改
.clang-format/.clang-tidy配置即可,不需要修改CI逻辑。
内容的提问来源于stack exchange,提问作者Tom Penard
相关产品推荐
相关产品推荐

