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
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部