手把手教学借助CI做代码格式审查、编译审查 | CI/CD搭建流程 — GitLab篇
本文分享自中移OneOS微信公众号《 CI/CD搭建流程 — GitLab篇》,作者 Kisann。
让GitLab CI/CD做什么
嵌入式软件开发领域高频使用的开发语言是C语言,在大型项目开发中,我们往往会有格式审查、编译审查的需求。如果能借助GitLab平台实现代码的格式和编译问题审查,将会大大提高合入代码的规范性,把控新代码对原有代码的影响,提高代码整体质量。
本文将手把手教学如何借助CI帮我们做代码格式审查、编译审查。
GitLab CI/CD快速搭建
VC Code设置
1.将VS Code设置为保存时自动格式化。
2.在代码根目录下放置.clang-format和.clang-format-ignore文件。
.clang-format文件是代码格式化和格式检查的配置文件,可以从Clang-Format官方网页下载到模板再根据自己的需求调整,语法详见链接[1]。编辑好了.clang-format这个文件,置于代码根目录,用VS Code编辑完代码后执行保存操作,保存的文件将自动按这个文件的格式规范来格式化代码。
.clang-format-ignore文件是用于配置在CI中忽略代码格式检查的文件或文件夹。
GitLab 配置
前提:你已经在GitLab有代码仓库,并且你是仓库的Owner或Maintainer身份。
如何让GitLab CI/CD为我们做代码格式的审查和编译审查呢,总结起来就六点:
1. 仓库根目录配置.gitlab-ci.yml文件;
2. 仓库中配置代码审查的脚本、clang-format格式审查工具和编译脚本
3. 配置一个用于编译的MDK工程;
4. 为GitLab公共仓库配置一个Runner(一般是服务器);
5. 为GitLab个人仓库配置一个Runner(一般是本机);
6. Runner环境配置。
.gitlab-ci.yml可以理解为流水线文件,使用 YAML语法描述,.gitlab-ci.yml文件描述了你要做什么事情。本需求包括代码的拉取、代码格式审查和代码编译。把.gitlab-ci.yml放到远端分支的根目录,你每次push或Merge代码到Git远程仓库时,Runner都会自动触发CI pipeline,去执行.gitlab-ci.yml流水线文件中描述的事。
Runner很好理解,就是一个用来跑仓库代码的格式审查与编译审查的机器,一般公共仓库会是一台服务器,个人仓库会是本机。
具体配置流程:
1..gitlab-ci.yml文件
.gitlab-ci.yml如下:
文件描述了代码更新方式和两个Job。一个Job是check,做代码格式审查;另一个Job是build,做代码编译。script描述的是执行命令,即在Runner中执行的命令。tags描述的是Runner的标识,与Runner注册时的设置一致,用于在CI pipeline中顺利找到该主机。
代码格式审查的命令:python .workflow/ci/format_check/run-clang-format.py --clang-format-executable .workflow/ci/format_check/clang-format.exe -r components/ 。命令中调用了Python脚本和clang-format.exe执行文件,并指定了要检查的文件夹路径。
代码编译的命令:.workflow/ci/build/build_keil.bat,调用了指定路径下的编译脚本。
2.脚本及工具配置
在代码仓库.workflow > ci路径下的不同文件夹中放置格式审查的脚本、clang-format格式审查工具、编译脚本:
format_check文件夹放置run-clang-format.py格式审查脚本和clang-format.exe执行文件,clang-format.exe版本为12.0.1:
build文件夹放置build_keil.bat编译脚本:
3.编译工程
在代码仓库 .workflow > ci > projects_compile路径下放置一个或多个用于编译的MDK工程,通过一个或多个工程的配置来铺盖所有代码。
4.公共仓库配置Runner
首先要找到一台windows主机。
1)在系统中的某处创建一个文件夹,例如:F:\OneOS_Operate_System\GitLab-Runner。
2)下载64 位[2]或32 位[3]二进制文件并将其放入创建的文件夹中。重命名为gitlab-runner.exe(可选)。
3)注册Runner
打开Windows PowerShell,进入F:\OneOS_Operate_System\GitLab-Runner路径运行./gitlab-runner.exe register命令:中间阶段需要输入URL、Token、Runner的描述、Runner的标识、shell。其中Runner的标识需要与.gitlab-ci.yml文件中的tags描述的Runner的标识一致,否则无法找到指定的Runner。
其中的URL和Token则是来自代码仓库的Runner设置中:
4)修改config.toml
注册完Runner后,可以在F:\OneOS_Operate_System\GitLab-Runner文件夹下看到config.toml文件,打开并修改一处:shell = "pwsh"为shell = "powershell"
5)启动Runner
继续在Windows PowerShell中依次执行命令.\gitlab-runner.exe install和.\gitlab-runner.exe start就可以启动Runner:
启动成功后可以看到Runner下多了一个设备,设备标识为win_ci,因此.gitlab-ci.yml文件中的tags也应该是win_ci:
5.个人仓库配置Runner
个人仓库的Runner搭建在本机,配置方法基本等同于公共仓库的Runner配置方法,唯一差别是注册Runner时的URL、Token需要从个人仓库的中获取。注册时输入的Runner标识与公共仓库的Runner标识保持一致。
6. Runner环境配置
要想让Runner成功的跑格式审查命令:python .workflow/ci/format_check/run-clang-format.py --clang-format-executable .workflow/ci/format_check/clang-format.exe -r components/ 和代码编译的命令:.workflow/ci/build/build_keil.bat还需要对Runner做一定的配置(服务器和本机都必须要):
1)安装python
2)安装MDK v5
3)添加系统环境变量(Python和MDK都要确保添加)
7.重启Runner
输入命令:./gitlab-runner.exe restart来重启Runner,首次服务器和本机都要执行此命令重启Runner。成功后就不用在执行此命令,主机即使重启也可以正常使用Runner不需要做其它。
8.触发
个人仓库的push或从个人仓库向公共仓库提Merge请求会触发流水线,会对整个代码仓库进行代码格式审查和编译,任何一项不通过将无法合入公共仓库。
References
[1] 链接: https://releases.llvm.org/12.0.0/tools/clang/docs/ClangFormatStyleOptions.html
[2] 64 位:https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe
[3] 32 位:https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-386.exe
OneOS是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M/R/A、MIPS、RISC-V等主流CPU架构,兼容POSIX、CMSIS等标准接口,支持Micropython语言开发,提供图形化开发工具,能够有效提高开发效率并降低开发成本,帮助客户开发稳定可靠、安全易用的物联网应用。 官网地址:https://os.iot.10086.cn/
OneOS技术交流群:158631242
手把手教学借助CI做代码格式审查、编译审查 | CI/CD搭建流程 — GitLab篇相关推荐
- 使用GitHub Actions通过CI提高代码质量
不论是开发.暂存还是生产环境,无时无刻都有代码不间断地被推送到 Git 上. 我们总是想要确保我们投入大量时间设计和编写的代码是具备可读性与安全性的,并且没有漏洞,能够平稳地运行. 使用自动化可以节省 ...
- 看完这篇文章再也不用担心代码格式不对无法合并了
本文由RT-Thread论坛用户@RTT_逍遥原创发布:https://club.rt-thread.org/ask/article/3121.html GITHUB仓库: git_auto_scri ...
- 怎样检查c语言程序的问题,C语言陷阱与技巧第24节,做代码选择,不一定都要使用 if 判断的...
在C语言程序开发中,实现需求的解决方案往往不止一个.解决一个问题,程序员一般都能够设计出多个解决方案,并写出相应的C语言代码. 可能有读者会觉得,解决问题的话,写出一种方法就可以了,给出多个方法没有意 ...
- Node.js 单元测试:我要写测试 - Mocha - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
-------------------------------------- 单元测试Express/NodeJs 个人理解, 1,如果不是测试http请求的单元测试,用Mocha, Chai等基本够 ...
- 阿里Java编程规约(命名风格、常量定义、代码格式)
命名风格 1.[强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例:_name / __name / $name / name_ / name$ / name__ 2 ...
- A311D用工业相机APP获取raw图像并做各种格式转换
A311D用工业相机APP获取raw图像并做各种格式转换 目录 主要涉及的知识点有: 2 RAW 图格式转换(主要意义) 2 Android 通用串口通信,及usb转串口通信 2 1先创建androi ...
- python代码格式-Python 代码格式
原标题:Python 代码格式 在格式方面与其他大众语言相差不大,但也有它独特之处,尤其是代码缩进.在其他的编程语言中,代码缩进大多是为了美观,程序.函数的开始结束都是由花括号来控制的.在Python ...
- python代码格式-pyhon代码设计格式指南
一 缘由: 经常看到周围人写的代码,在大公司有规范,很多人不乱写代码,但是在很多小公司,很多程序员都是半路出家,也不喜欢读书学习,导致写出来的代码乱七八糟.今天拜读了python编程这本书,作者把py ...
- python代码格式-设置Python代码格式
代码编写风格的重要性: 随着你编写的程序越来越长,有必要了解一些代码格式设置约定.请花时间让你的代码尽可能易于阅读:让代码易于阅读有助于你掌握程序是做什么的,也可以帮助他人理解你编写的代码.为确保所有 ...
最新文章
- mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析
- 提示JS错误:WebForm_PostBackOptions 未定义
- python医学图像读取_对python读取CT医学图像的实例详解
- 什么比日期和时区更难? SQL / JDBC中的日期和时区!
- c语言鼠标环绕特效,C语言写的鼠标有残影,急需解决方案,在线等待!
- 第一个冲刺周期(第四天)
- C++基础::shared_ptr 编程细节(一)
- python之IO多路复用
- NP、OSPF 缺省路由
- Linux下如何实现对某个文件夹进行压缩
- 桌面美化 | win10高仿mac桌面
- nmos导通流向_MOS管知识大集
- 企业微信重磅更新!离职继承无需客户同意、群自动踢人、群成员去重...
- rtmp协议分析(Message 消息,Chunk分块)
- 什么是用户代理样式表
- 暂存分支 Git stash
- 基于matlab介绍传感器融合和跟踪工具箱中用于评估跟踪器性能的不同定量分析工具(附源码)
- 微信开发者工具调试公众号网页提示: 未绑定为公众号的网页开发者
- 自上而下语法分析器python
- 前端JavaScript的学习笔记