Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

15 | 研发流程实战:IAM项目是如何进行研发流程管理的?

Pull Request流程
GitHub Actions CI流水线
Commit Message规范
自动化流水线
测试覆盖率
单元测试
静态代码检查
代码格式化
版权检查
代码生成的幂等性
自动生成代码
pre-commit githooks
分支命名规范
Git Flow工作流
保持行为一致
自动生成版本号
自动生成CHANGELOG
Options中指定变量值
help自动解析
删除feature/release分支
合并到master/develop分支
测试提交
release分支测试
代码提交
代码开发
IAM项目的Makefile项目管理技巧
测试阶段
开发阶段
课后练习的讨论
IAM项目的Makefile技巧
Makefile集成操作
开发者深度参与的阶段
其他值得集成在 make format 目标的格式化工具
make dependencies 实现及好处
IAM项目的研发流程
下一讲
总结
课后练习
IAM项目研发流程管理
研发流程实战

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。
在 08 讲 和 14 讲 ,我分别介绍了如何设计研发流程,和如何基于 Makefile 高效地管理项目。那么今天,我们就以研发流程为主线,来看下 IAM 项目是如何通过 Makefile 来高效管理项目的。学完这一讲,你不仅能更加深刻地理解 08 讲 和 14 讲 所介绍的内容,还能得到很多可以直接用在实际操作中的经验、技巧。
研发流程有很多阶段,其中的开发阶段和测试阶段是需要开发者深度参与的。所以在这一讲中,我会重点介绍这两个阶段中的 Makefile 项目管理功能,并且穿插一些我的 Makefile 的设计思路。
为了向你演示流程,这里先假设一个场景。我们有一个需求:给 IAM 客户端工具 iamctl 增加一个 helloworld 命令,该命令向终端打印 hello world。
接下来,我们就来看下如何具体去执行研发流程中的每一步。首先,我们进入开发阶段。

开发阶段

开发阶段是开发者的主战场,完全由开发者来主导,它又可分为代码开发和代码提交两个子阶段。我们先来看下代码开发阶段。

代码开发

拿到需求之后,首先需要开发代码。这时,我们就需要选择一个适合团队和项目的 Git 工作流。因为 Git Flow 工作流比较适合大型的非开源项目,所以这里我们选择 Git Flow 工作流。代码开发的具体步骤如下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

IAM项目通过Makefile高效管理项目研发流程,强调了幂等性和自动化以提高开发效率和保证代码质量。文章介绍了开发阶段的代码开发流程,包括Git Flow工作流、自动生成代码、版权检查、代码格式化、静态代码检查、单元测试和构建等操作。作者还提到了Makefile编写技巧,如自动生成githooks脚本、自动安装工具、以及执行多个操作的快捷方式。在测试阶段,开发人员负责提供测试包和修复测试期间发现的bug。IAM项目的Makefile还包括自动解析help、Options中指定变量值、自动生成CHANGELOG和版本号。这些技巧使得项目管理更加高效,为读者提供了一些可以直接用在实际操作中的经验和技巧。整个研发流程中,开发者需要深度参与的阶段有两个,分别是开发阶段和测试阶段。在开发阶段,开发者完成代码开发之后,通常需要执行生成代码、版权检查、代码格式化、静态代码检查、单元测试、构建等操作。这些操作可以集成在Makefile中,以提高效率并统一操作。IAM项目在编写Makefile时也采用了一些技巧,例如通过解析Makefile文件的注释来完成`make help`命令中的help信息;自动生成CHANGELOG;以及通过gsemver自动生成语义化的版本号。整体而言,本文介绍了IAM项目通过Makefile管理项目研发流程的方法和技巧,为读者提供了一些实用的经验和技巧。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
,新⼈⾸单¥68
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • Alery
    “如果 review 不通过,feature 开发者可以直接在 feature/helloworld 分支修正代码,并 push 到远端的 feature/helloworld 分支,然后通知 reviewers 再次 review。因为有 push 事件发生,所以会触发 GitHub Actions CI 流水线。” 请问修复后的代码是直接执行gith commit --amend还是重新创建一个commit

    作者回复: 都可以的。

    2021-07-13
    2
    4
  • daz2yy
    老师好,想问下,测试阶段过了之后,这个特性就能直接上线吗?还是说等大家一起开发完这个迭代内容再上线? 另外,后端开发这里经常会设计 SQL 的变动,一种是数据变动,一种是结构变动,老师这块怎么去管理的呢?还有如何集成到特性研发流程里的呢?

    作者回复: 测试完之后就会上线 数据库变动这种运维开发,发布的时候变动,可以写在发布计划里

    2021-06-29
    3
    4
  • helloworld
    release分支是从develop分支来的,如果测试直接通过,没有做进一步修改,就不用再合并到develop分支了吧,直接合并到master分支就可以了吧,这样理解对不对呢

    作者回复: 如果代码都一样没必要再合,不过再合下没什么大问题,小心总不为过。

    2021-06-29
    2
    3
  • Geek_6bdb4e
    我来回答一下第一个问题:make dependencies会执行dependencies.run,进而执行1. dependencies.packages,这个是对代码本身依赖的packages进行管理,2. dependencies.tools,这个是对项目本身依赖的一些工具进行检查和管理,其中又根据重要等级区分为blocker和critical以及trivial,缺失blocker可能导致CI流程失败,缺失critical可能导致make的一些环节失败,tiivial是可选的工具,缺失没有任何影响。我有一个小问题,这个make dependencies的调用时机是什么时候,发现只有通过make dependencies时候才会调用,为什么不把这条放到make all的依赖项里面呢

    作者回复: 调用时机,项目刚clone下来的时候: git clone https://github.com/marmotedu/iam make dependencies 不放在all的原因时,make dependencies 只需要执行一次就可以了。 放在all中,每次都要执行dependencies,会导致make命令很慢

    2022-04-02
    2
    2
  • 徐蕴
    测试完成的tag应该打在master上,还是release分支对应的commit上呢?master上应该还有其它没有测试的功能吧?

    作者回复: 好问题。打在release分支上。 master分支上的代码都是充分测试过的代码。不然不让合master的

    2021-08-05
    2
  • H.xu
    [going@192 iam]$ make test ===========> Run unit test found packages example (doc.go) and main (example.go) in /home/going/workspace/golang/src/github.com/marmotedu/iam/pkg/rollinglog/example found packages example (doc.go) and main (example.go) in /home/going/workspace/golang/src/github.com/marmotedu/iam/pkg/validator/example no Go files in /home/going/workspace/golang/src/github.com/marmotedu/iam make[1]: *** [scripts/make-rules/golang.mk:81: go.test] Error 1 make: *** [Makefile:108: test] Error 2 这个错误是什么原因的呀

    作者回复: 是不是没有执行go work use iam呀

    2022-05-02归属地:广东
    2
    1
  • 🌿小毒草
    如何保证“通过make gen 生成的存量代码要具有幂等性”, 如何测试?

    作者回复: 这个要具体情况具体分析。具体,可以添加代码生成功能项的时候,评估测试下

    2022-04-27
    1
  • 江山未
    根据符合规范的commit message 生成版本号,这里有个疑问 是一次commit会滚动一次数字吗?因为一个版本可能包含多个feature,feature a有一次commit,feature b有一次commit,但它们都属于这次的版本更新。那会造成 minor version +2 吗

    作者回复: 版本号可按以下规则递增: 1. 主版本号(MAJOR):当做了不兼容的 API 修改。例如:带有 BREAKING CHANGE 的 commit。 2. 次版本号(MINOR):当做了向下兼容的功能性新增及修改。这里有个不成文的约定需要你注意,偶数为稳定版本,奇数为开发版本。(feat: xxxx) 3. 修订号(PATCH):当做了向下兼容的问题修正。(fix: xxx)

    2021-12-22
    1
  • yandongxiao
    总结:这些步骤应该是开发者经常遇到的。 开发阶段:执行 make all,本地走一遍CI流程。包括,自动生成部分代码或文档、静态代码检查、代码格式化、构建等。 提交阶段:检查 commit message 是否符合 angular 规范;在 push commit / pull request / merge to develop 点,触发 CI 流程。所以,开发者要有在本地跑CI的方法。 测试阶段:按照 Git Flow 的原则,创建出 release 分支,对代码进行测试。

    作者回复: 66666

    2021-11-27
    1
  • lesserror
    孔老板,能大致说说:IAM 项目的分支命令规则图怎么解读吗? 主要确认一下和我理解的是否相同。

    作者回复: valid_branch_regex="^(master|develop)$|(feature|release|hotfix)\/[a-z0-9._-]+$" 这个正则能回答你的问题吗

    2021-10-01
    2
    1
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部