Gitee Go代码格式审查、程序编译和冒烟测试 | CI/CD搭建流程-Gitee篇
本文分享自中移OneOS微信公众号:《CI/CD搭建流程-Gitee篇》,作者: Kisann。
Gitee CI/CD能力
Gitee,即码云,是OSCHINA.NET推出的代码托管平台,已有超过600 万的开发者选择Gitee。Gitee Go是Gitee推出的CI/CD(持续构建与集成)服务,类似GitLab CI/CD,用户可以通过自定义构建流程,实现构建集成自动化。Gitee Go目前已支持Maven、Gradle、npm、Python、Ant、PHP、Golang 等工具和语言的持续构建与集成能力。Gitee Go也支持脚本模式,即流水线文件中描述执行脚本,定义任何想做的事情,比如代码格式审查等。由于目前只支持添加Linux主机,因此脚本语言选择shell。
让Gitee Go做什么
嵌入式软件开发领域高频使用的开发语言是C语言,在大型项目中,我们往往会有格式审查、编译审查、冒烟测试等需求。如果能在代码托管平台进行格式规范审查和编译问题审查,将会大幅提高合入代码的规范性,把控新代码对原有代码的影响,提高代码整体质量。
本文将手把手教学如何让Gitee Go帮我们做代码格式审查、程序编译和冒烟测试。
快速搭建Gitee Go
集成方案
• VS Code用于本地格式化代码
– VS Code设置为文件保存时格式化
– 需要在根目录放置.clang-format文件,这是代码格式化的配置文件
• Gitee托管代码,提供push、pull request、WebHooks机制
– push、pull request可以触发流水线进行代码的格式与编译检查
– WebHooks可以触发Jenkins进行冒烟测试(需要服务器连接上测试用的硬件设备)
• Gitee Go触发流水线,在服务器进行代码格式审查与编译审查
• Gitee WebHooks用于触发Jenkins进行冒烟用例的测试。
• 服务器为作业机器,是运行格式检查、编译检查和冒烟测试的主机。
详细搭建步骤
在这里以Gitee Go做代码格式审查为例详细描述Gitee Go搭建流程:
1. 开通企业账户
注:支持免费开通并试用30天。
2. 开通Gitee Go服务:企业管理 > 代码仓库 > 某一仓库 > DevOps > Gitee Go > 同意并开通(每个代码仓库需要单独开通)
3. 领取免费500分钟构建时长:领取成功后可在 企业管理 > 基本管理设置 > 扩展应用 > Gitee Go 中看到免费赠送的时长,以及已开通Gitee Go服务的代码仓库。
4. 添加主机(流水线作业的服务器):企业管理 > 基本管理设置 > 计算资源管理 > 新建主机组
新建主机组:
主机组的ID后续在流水线文件中要用到
主机管理 > 新建主机:
复制命令,然后你需要找到一个Linux服务器或Linux虚拟机。在Linux执行这里复制的命令,会在Linux主机开启一个代理。
执行成功后可以在页面看到一台在线的主机。
主机组与仓库关联:
关联之后,仓库就能在流水线中顺利地调用到该主机资源
到此就已完成主机的添加。
5. 流水线配置文件
代码仓库 > DevOps > Gitee Go > 新建流水线
点击代码视图,进行流水线配置文件的编写:
Gitee Go 流水线配置文件通过 YAML 语言来描述的,保存后就会看到代码仓库的根目录下多了一个.workflow文件夹,在该文件夹下有一个名为gitee-ci-pipeline.yml的流水线配置文件。
附上用于代码拉取并进行格式审查的流水线文件:
version: '1.0' name: shell-code-style-check displayName: 代码格式审查 stages: - stage: '' name: shell-code-style-heck displayName: 代码格式审查 steps: - step: shell@agent name: shell-code-style-check displayName: 代码格式审查 hostGroupID: backend-server script: | echo '====Get git code====' pwd ls if [ ! -d "code" ];then echo "folder not exist, new it" mkdir code else echo "folder exist" fi cd code ls if [ ! -d "OneOS-Lite" ];then echo "folder not exist, start clone" git clone https://gitee.com/jixiaowei_cmiot/OneOS-Lite.git cd OneOS-Lite git checkout -b dev git pull origin dev else echo "folder exist, start pull" cd OneOS-Lite git pull origin dev fi echo "====Start code style check====" python .workflow/ci/format_check/run-clang-format.py --clang-format-executable /usr/bin/clang-format-12 -r components/ triggers: push: branches: include: - ^feature.* - dev
6. 触发流水线
从流水线文件的triggers看出,流水线的触发方式是dev分支代码push事件,流水线会在添加的主机上进行代码拉取或更新,再调用python工具进行代码格式的审查。
触发的前的工作:先在代码根目录放置.clang-format文件,该文件是代码格式化和代码格式检查的配置文件,可以从Clang-Format官方网页下载到模板再根据自己的需求调整:
再进行VS Code保存时自动格式化的设置,这样代码保存就完成了格式化:
其次,Linux主机上安装Python和clang-format。
还有,需要将python脚本放置到代码仓库的指定路径,这样流水线配置文件中描述的shell命令才能正确执行,在Linux主机运行的话clang-format.exe是不需要的:
最后,只需要push代码或合入pull request就能触发流水线。
7. 查看流水线结果
代码仓库 > DevOps > Gitee Go >,可以看到流水线和构建历史。
在构建历史中可以查看代码需要调整格式的地方。
OneOS是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M/R/A、MIPS、RISC-V等主流CPU架构,兼容POSIX、CMSIS等标准接口,支持Micropython语言开发,提供图形化开发工具,能够有效提高开发效率并降低开发成本,帮助客户开发稳定可靠、安全易用的物联网应用。 官网地址:https://os.iot.10086.cn/
OneOS软件地址:http://www.oschina.net/p/cmcc-oneos
OneOS项目地址:https://gitee.com/cmcc-oneos/OneOS
OneOS技术交流群:158631242

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kafka和RabbitMQ有哪些区别,各自适合什么场景?
经常有人问我 有个 xx 需求,我应该用 Kafka 还是 RabbitMQ ? 这个问题很常见,而且很多人对二者的选择也把握不好。 所以我决定写篇文章来详细说一下:Kafka 和 RabbitMQ 的区别,适用于什么场景? 同时,这个问题在面试中也经常问到。 下面我会通过 6 个场景,来对比分析一下 Kafka 和 RabbitMQ 的优劣。 一、消息的顺序 有这样一个需求:当订单状态变化的时候,把订单状态变化的消息发送给所有关心订单变化的系统。 订单会有创建成功、待付款、已支付、已发货的状态,状态之间是单向流动的。 好,现在我们把订单状态变化消息要发送给所有关心订单状态的系统上去,实现方式就是用消息队列。 在这种业务下,我们最想要的是什么? 消息的顺序:对于同一笔订单来说,状态的变化都是有严格的先后顺序的。 吞吐量:像订单的业务,我们自然希望订单越多越好。订单越多,吞吐量就越大。 在这种情况下,我们先看看 RabbitMQ 是怎么做的。 首先,对于发消息,并广播给多个消费者这种情况,RabbitMQ 会为每个消费者建立一个对应的队列。也就是说,如果有 10 个消费者,RabbitM...
- 下一篇
Gradle 与 AGP 构建 API: 进一步完善您的插件!
欢迎阅读 MAD Skills 系列 之 Gradle 与 AGP 构建 API 的第三篇文章。在上一篇文章《Gradle 与 AGP 构建 API: 如何编写插件》中,您学习了如何编写您自己的插件,以及如何使用 Variants API。 如果您更喜欢通过视频了解此内容,请 点击此处 查看。 在本文中,您将会学习 Gradle 的 Task、Provider、Property 以及使用 Task 进行输入与输出。同时您也将进一步完善您的插件,并学习如何使用新的 Artifact API 访问各种构建产物。 Property 假设我想要创建一个插件,该插件可以使用 Git 版本自动更新应用清单文件中指定的版本号。为了达到这一目标,我需要为构建添加两个 Task。第一个 Task 会获取 Git 版本,而第二个 Task 将会使用该 Git 版本来更新清单文件。 让我们从创建名为 GitVersionTask 的新任务开始。GitVersionTask 需要继承 DefaultTask,同时实现带有注解的 taskAction 函数。下面是查询 Git 树顶端信息的代码。 abstrac...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19