写得了代码,焊得了板!嵌入式开发工程师必修之代码管理方案(下)

news2024/11/29 18:27:48

目录

极狐GitLab嵌入式开发场景解决方案

3.1 高可用部署与灾备

3.2 组织管理

3.3 分支策略

3.4 分支保护

3.5 推送规则

3.6 代码评审

3.7 数据保护

3.8 其他相关


本文来自

武让 极狐GitLab 高级解决方案架构师

💡 前两篇文章,作者介绍了嵌入式开发场景之

  • 代码管理特点与诉求,代码管理工具与方式之 SVN 与 Git

  • 嵌入式开发场景的代码管理分仓、权限与依赖问题,以及基于 Git 的多仓管理

👆戳链接即可回顾前情。

本文进一步介绍极狐GitLab 针对嵌入式开发的解决方案。Enjoy~

极狐GitLab 嵌入式开发场景解决方案

围绕企业对于嵌入式开发场景的诉求,极狐GitLab 提供了一整套解决方案,可以较好解决嵌入式开发场景下的种种问题,重点包括以下几部分内容。

3.1 高可用部署与灾备

企业进行代码统一管理的前提是代码管理系统具备高可用、高性能以及容灾等特性,才能支撑企业安全可靠的管理代码数据资产。

极狐GitLab 专业版提供高可用部署方案,是松耦合分布式架构,各组件均为多副本部署,各组件均可实现横向扩展。

极狐GitLab 高可用架构通过横向扩展同时实现了高性能,针对从 1k 到 50k 用户数场景提供了不同的参考架构,满足不同用户规模的企业。

极狐GitLab 同时提供 GEO 主从架构部署方案,该方案为一主多从架构,主从节点配置不必完全一致,主节点提供读写服务,从节点提供只读服务,数据在主从节点之间实时同步,可实现:

  • 通过访问就近节点加速;

  • 负载分担;

  • 准实时备份;

  • 灾难恢复。

当主节点出现故障后可在几分钟内将从节点切换为主节点,恢复服务。

极狐GitLab GEO 在实现准高可用的同时,极大降低基础设施资源成本、部署和运维成本。

3.2 组织管理

极狐GitLab 通过群组、子群组嵌套关系实现对企业复杂组织关系的映射,嵌套最多支持 20 层,可以有效管理企业中的部门、组织、虚拟组织、项目。

代码库隶属于群组或子群组,可在任意群组、子群组对仓库和人员权限进行管理。

  • 对于需要总览整个群组的管理人员,可以将其在父群组上分配权限,该用户的权限将被继承到所有子群组和代码库中;

  • 对于需要查看部分内容的项目经理,可以将其在某个子群组上分配权限,该用户只可看到子群组下所有子子群组和代码库的数据;

  • 对于只专注于具体功能模块的开发人员,只需要将其在具体的代码库上分配权限即可,这样就实现了在分仓模式下的授权管理。

3.3 分支策略

前文提到,分支管理是 Git 的优势,分支策略也是体现 Git 高效协同的重要价值,此外分支策略直接决定了研发流程的标准化

从事嵌入式开发的企业进行 DevOps 转型,首先要考虑的就是分支策略怎么建立。以下是常见的几种分支模型,可供参考:

从极狐GitLab 自身实践的角度出发,我更倾向两种分支策略:

  • 上图是极狐GitLab 自己的分支策略,本身是属于版本分支 GitLab Flow,适合多人协同的大、中型项目。相较于Git Flow 裁剪了一些不必要的分支,降低复杂度;

  • 下图是对于小型项目推荐的极简分支策略,本身是属于 GitHub Flow,适合单人或者较少人员协同的小型项目。

需要注意的是,没有所谓的最佳分支策略,因为不同企业的研发流程不一样,即便是同一家企业的不同团队或者同一个团队在不同时期的研发流程也是不一样的,这时候就需要基于这些常见的分支策略总结和提炼一套属于自己的分支模型,并且对它持续进行检验和迭代。比如对于小型嵌入式项目,如果存在对不同的芯片或用户有定制版本,那么更建议基于 GitHub Flow,加入 Release 分支来管理不同的交付版本。

3.4 分支保护

当分支策略制定完成,如何保证开发人员遵循这套流程?那一定是需要工具层面有约束手段。

极狐GitLab 提供分支保护功能,可以限制开发人员直接向主分支提交代码,必须通过向 feature 分支或 dev 分支提交代码,再通过 Merge Requests 的方式合并到主分支,可以降低代码冲突,提高协同效率,同时也为开发团队践行代码评审提供了工具侧的落地支撑。

此外极狐GitLab 专业版实现了更加精细化的分支保护管理,可以对于指定的用户设置推送和合并权限,以此保证分支代码的可审核和可追溯性,免费版只能较粗粒度的指定某一类用户角色,如 Developer、Maintainer。

3.5 推送规则

代码规范也是 DevOps 转型非常关注的内容,以往粗放式的代码提交方式容易导致代码提交记录极度混乱、不可识别,比如大量 1111test1 之类的提交记录,不仅让协同人员无法接手、难以理解,甚至提交人自己也无法基于这些记录进行拉取或者回滚操作。

极狐GitLab 专业版提供的推送规则功能可以很好的解决这个问题,它可以实现:

  • 验证提交人是否是极狐GitLab 用户;

  • 自定义正则表达式,验证代码提交记录是否符合一定的规范;

  • 自定义正则表达式,验证分支名称是否符合一定的规范;

  • 自定义正则表达式,验证提交文件中是否有不符合规范的文件,比如 .zip、.tar 文件;

  • 验证提交的文件是否超过一定的大小。

推送规则验证不通过,则代码无法被推送到极狐GitLab 代码库中,从而确保研发人员严格按照规范进行代码提交。

规范代码提交信息可配合 Commitizen 工具,它可以按照一些行业内通用的提交规范引导开发人员填写提交信息;也可以配合 .gitignore 文件过滤一些不需要上传的文件或文件类型。它们都是在客户端发挥检查作用,本身不具备约束性质,开发人员可用可不用,而推送规则是在服务端进行验证,确保最终合规。

所以可以说 Commitizen、.gitignore 是源头检查,推送规则是尽头把关。两者可配合,但前者不可替代后者。

3.6 代码评审

由于嵌入式开发的周期相对较长,交付频率相对较慢,交付物多是固件,不具备互联网纯软件、高速迭代、灵活升级的特性,所以处理问题的成本也比较高,这也使得近些年从事嵌入式开发的企业对软件质量的要求逐渐提高,而提高软件质量最常用的方式就是进行代码评审

极狐GitLab 专业版提供了完善的代码评审机制,其中主要包括:

  • 支持强制代码评审,评审不通过不允许合并代码;

  • 支持自定义代码评审规则,针对不同分支设置不同评审人,以及最小核准人数;

  • 支持多重审批规则;

  • 支持当单元测试覆盖率降低时触发代码评审;

  • 支持阻止代码提交人、合并请求发起人进行评审;

  • 支持设置 Code Ower(代码负责人)为审批人。

其中 Code Owner 可以为代码库的不同目录、不同文件、不同文件后缀设置代码评审人,比如:

这就实现了对 Git 代码库的目录、文件进行写入控制,也解答了上文中遗留的问题。

3.7 数据保护

上文也提到了数据保护,代码防泄漏的相关问题,具体落实到系统层面,极狐GitLab 可以从事前、事中、事后三个方面提供支撑。其中最重要的是对极狐GitLab 的操作行为进行记录和分析,实现审计功能。

极狐GitLab专业版支持对创建仓库、修改密码、权限变更等系统事件进行审计,也支持对代码推拉事件进行审计,并可以事件流的方式传递给第三方日志系统,以便对数据进行分析和展示,也可以制定一些规则并触发告警或通知。

此外,在与第三方 DLP 工具对接的过程中,我们发现有些客户的 DLP 工具只能对 Git 客户端或 IDE 进行加密,而 GitLab 本身还可以通过在网页上直接打包下载的方式获取源码,这给客户的数据保护工作造成一些麻烦。所以极狐GitLab 为这个本土化需求增加了一项功能,可以在网页上禁用源代码下载,以便更好的解决数据保护问题。

3.8 其他相关

除了以上在源代码管理方面的优势外,极狐GitLab 还提供了一些其他的附加功能,比如:

  • 在工具方面,极狐GitLab 提供了 IDE 插件,可以更方便对极狐GitLab 中的项目、代码、流水线进行管理;提供了 WebIDE,可以在线对代码进行查看、对比、编辑操作。

  • 在项目管理方面,极狐GitLab 自身提供轻量的偏敏捷的项目管理功能,且可以和主流的项目管理工具如 Jira、禅道、PingCode 以及和传统制造行业常用的 PLM 系统 Windchill 进行集成和打通,实现在需求管理系统中查看该需求任务关联了哪些极狐GitLab 的代码提交和合并请求,实现项目到开发的流程关联与追溯。

  • 流水线是 DevOps 中的重要组成部分,也是研发效率提升的根本,极狐GitLab 提供了开箱即用的 CI/CD 功能,相较于Jenkins,极狐GitLab CI 依靠其一体化、轻量化、声明式、开箱即用的特性,在开发者群体中的使用率越来越高,在国内企业中仅次于 Jenkins 排在第二位。极狐GitLab 也为从事嵌入式开发的企业做完源代码统一管理后,进行更进一步的 DevOps 转型提供支撑和帮助。

最后,随着物联网、人工智能等技术的不断发展,嵌入式系统的应用场景将会更加广泛,这将会催生更多的 DevOps 应用场景,也会进一步推动 DevOps 在嵌入式开发场景中的落地,期待那一天早点来到。

参考:

  1. 关于版本控制 | git-scm.com

  2. 关于Git与SVN | techug.com

  3. Git与SVN对比 | 腾讯云开发者社区

  4. GitHub 将于明年停止支持 Subversion(SVN)| IT之家

  5. Introduction | Conan Tutorial

  6. Git submodule | Atlassian

  7. Git Subtree | Atlassian

  8. git-repo | Git at Google

  9. alibaba/git-repo-go | GitHub

  10. 极狐GitLab 文档中心

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

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

相关文章

接口自动化测试系列-接入测试平台

测试平台目录 测试平台自建源码 后台核心代码 def add_api(kwags):"""插入api数据"""try:join_info CaseApi(namekwags.get("name"), httpTypekwags.get("httpType"),headerskwags.get("headers") if kwags.ge…

Rhinoceros(犀牛)使用技巧:有关曲线和曲面的分析

Rhinoceros(犀牛) for Mac破解版是一款功能强大的高级建模软件,可以创建、编辑、分析、提供、渲染、动画与转换 NURBS 线条、曲面、实体与多边形网格。不受精度、复杂、阶数或是尺寸的限制,在本篇文章中,为您介绍的是有…

AI与科学知识共生的桥梁,在未来AI会不会取代大学呢?

原创 | 文 BFT机器人 2023年,随着GPT在各行各业的爆发,“是否能将GPT用于科研场景”成为了一个水到渠成的问题。当ChatGPT超越大部分人类在高考、SAT、美国法考、医考等领域取得令人咋舌的高分后,人们对于GPT驱动科研的兴趣愈发高涨。截止本…

layui表格高度

layui表格的高度设置时使用 height:‘full’ 高度就是表格每个页面的总高度。也可以直接写数值,但是这是定高。 也可以使用 height:“full-数值”,比如 height:full-80 那么就会在表格占据剩余div的时候底部留100px。相当于margin-bottom:10…

【AI测试】python文字图像识别tesseract

[AI测试]python文字图像识别tesseract github官网:https://github.com/tesseract-ocr/tesseract python版本:https://github.com/madmaze/pytesseract OCR,即Optical Character Recognition,光学字符识别,是指通过扫…

骨传导耳机用久了伤耳朵吗?骨传导耳机有什么优势

骨传导耳机用久了不伤耳朵,相对于传统的入耳式耳机来说,对耳朵的压力和损伤较小。由于骨传导技术不直接通过耳道传递声音,而是通过振动将声音传送到内耳,因此相比其他类型的耳机,它在减少听力损伤的风险方面具有优势。…

3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?

终于二战上岸了,二战华为也并不是说非华为不可,只是觉得心里憋着一口气,这就导致我当时有其他比较好的offer,我也没有去,就是想上岸华为来证明自己,现在也算是如愿了,来跟大伙们分享一下~ 个人情况 我本人…

如何检查Windows 11笔记本电脑电池健康状况

如果你拥有一台运行微软最新操作系统的便携式电脑,那么检查Windows 11笔记本电脑的电池健康状况可能很重要。 电池寿命显然是一件大事,无论你是在最好的商务笔记本电脑上工作,还是在目前市场上最好的游戏笔记本电脑上享受马拉松式的Starfiel…

自然语言处理(七):来自Transformers的双向编码器表示(BERT)

来自Transformers的双向编码器表示(BERT) BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的自然语言处理模型,由Google于2018年提出。它是基于Transformer模型架构的深度双向&#xff0…

DOM 简介 | 深入了解DOM

目录 一、DOM是什么 二、DOM的访问 三、DOM节点类型 四、DOM的分级 今天我们将了解WEB编程中一个重要的概念DOM(Document Object Model)文档对象模型,它帮助我们使用JavaScript(或其他编程语言)操纵文档。 一、DO…

java IDEA文件路径分层级

如下图这样 在设置里找到Compact Middle Packages,去掉勾选就行了

MEMS传感器的原理与构造——单片式硅陀螺仪

一、前言 机械转子式陀螺仪在很长的一段时间内都是唯一的选项,也正是因为它的结构和原理,使其不再适用于现代小型、单体、集成式传感器的设计。常规的机械转子式陀螺仪包括平衡环、支撑轴承、电机和转子等部件,这些部件需要精密加工和…

如何建设一个安全运营中心(SOC)?

然信息安全管理问题主要是个从上而下的问题,不能指望通过某一种工具来解决,但良好的安全技术基础架构能有效的推动和保障信息安全管理。随着国内行业IT应用度和信息安全管理水平的不断提高,企业对于安全管理的配套设施如安全运营中心&#xf…

PMD 检查java代码:在条件语句中避免使用硬编码的字面量(AvoidLiteralsInIfCondition )

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_errorprone.html#avoidliteralsinifcondition 在条件语句中,避免避免使用硬编码的字面量。可以将字面量声明为有描述意义的静态成员或者私有成员,提升可维护性。默认忽略"-1" 和&qu…

Spring IoC 的工作流程

概况 IOC 是什么 Bean 的声明方式 IOC 的工作流程 IOC 是什么 IOC 的全称是 Inversion Of Control, 也就是控制反转,它的核心思想是把对象的管理权限交给容器。 应用程序如果需要使用到某个对象实例,直接从 IOC 容器中去获取就行,这样设计的好…

CSP 202303-1 田地丈量

样例输入 4 10 10 0 0 5 5 5 -2 15 3 8 8 15 15 -2 10 3 15 样例输出 44 答题 首先写一个计算面积的函数,既然大小固定就省去了比较,然后是将在范围之外的矩阵给忽略掉,接下来将碰到的矩阵大小缩小为范围之内的,累加即可 #in…

剪辑App的MMKV应用优化实践

作者 | 我爱吃海米 导读 移动端开发中,IO密集问题在很多时候没有得到充足的重视和解决,贸然的把IO导致的卡顿放到异步线程,可能会导致真正的问题被掩盖,前人挖坑后人踩。其实首先要想的是,数据存储方式是否合理&#x…

阿里云服务器2核4G5M配置一年和五年价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS,轻量2核4G4M带宽服务器297元一年,2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等,买5年可以享受3折优惠,阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

数字城市:科技革命下的未来之城

随着科技的不断进步,数字城市已经成为了未来城市发展的关键趋势。数字城市是指利用先进的信息技术、互联网和大数据等工具,将城市各个方面进行数字化、智能化、互联化的发展模式。它不仅仅是一种技术,更是一种对城市管理、发展和居民生活方式…

基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码

建筑行业快速发展,各建筑工程的建设规模在不断扩大,各岗位工作人员的工作内容所涉及的方面也越来越广泛。随着信息技术水平不断提高,人工记录的方式已经不能够满足大项目的管理要求,就此,创造出一种新型的施工管理技术——智慧工地…