24 | 快速反馈:为什么你们公司总是做不好持续集成?
24 | 快速反馈:为什么你们公司总是做不好持续集成?
讲述:郑晔
时长12:49大小11.75M
快速得到反馈
得到有效的反馈
总结时刻
赞 23
提建议
精选留言(28)
- 操盘手爱德华2019-12-13诸位看的时候别忘了,虽然老师说了别人修复之前不能提交。但是后面还有一句,如果一时半会儿修不好,应该撤掉提交
作者回复: 很好的关注点
22 - 西西弗与卡夫卡2019-02-27有启发。常遇到的问题是,项目多了以后CI资源吃紧要排队。虽然可以自己用本地多做事,但这有点像“公地悲剧”,只是自己节约还不够,会被别人挤占资源,所以大家抢着上,结果大家都慢。如果有智能CI可以依据以往占用资源的多少来分配CI优先级,或许可以缓解。当然,不差钱的话,增加机器可能更简单
作者回复: 能花钱解决的事都是小事,一个程序员比一台机器贵多了。
9 - Luke2021-06-21郑大文中提到工作中「心流」,在这里想要补充一下:Bob 大叔(Robot. C. Martin)认为「心流」仅适用于练习,而非正式的工作中的编码。「代码整洁之道—程序员的职业素养」中曾提到,开发人员在开发时应该避免进入这种状态,「心流」仅适用于练习,因为它会「将视野收拢到狭窄的状态」。 抄录原文如下: 一些曾经进入这种状态但最终又从中摆脱出来的人给出了一点儿忠告:避免进入流态区。这种意识状态并非真的极为高效,也绝非毫无错误。这其实只是一种「浅层冥想」状态,在这种状态下,为了追求所谓的速度,理性思考的能力会下降。... ... 如果你当时正在做 TDD,你会快速地重复「红/绿/重构」循环。你会收获一种愉悦感或征服感。问题在于,在流态区状态下,你其实放弃了顾及全局,因此,你很可能会做出一些后来不得不推倒重来的决策。在流态区写代码可能会快些,但是后面你将不得不更多地回头重新审视这些代码。展开
作者回复: 很好的补充
8 - 孤星可2019-02-27快速反馈这个观点是很赞同的 本地验证这个个人不太看好 以普通 JAVA 项目为例 本地跑一次 耗时以分钟计 这个间隔有点长了
作者回复: 如果你的本地检查可以在几分钟内完成,那就是可以在本地做的,因为你把它放到 CI 服务器上执行,效果只会更差,而且几分钟时间,稍作调整也并无不可。 如果时间很长,比如,超过十分钟,根据快速反馈的原则,就要考虑是不是考虑按照测试金字塔划分一下,在本地只跑单元测试。 但实际情况是,很多团队没有真正的单元测试,造成本地只能运行集成测试,甚至是验收测试,所以,会占据很长时间。
8 - eyeandroid2019-02-27老师,我的意思是其它人的提交被CI检查出错后只会影响他这笔提交,并不会block其它人的提交,所以并不会存在等待其它人修复这个说法,请教下我的理解对吗?因为我工作中遇到的情况是这样
作者回复: 谁破坏谁修复,CI 红的时候,除了修复的人,任何人不允许提交。这时如果有人已经完成代码准备提交,破坏 CI 的人就是阻塞了它人的工作,所以,要尽快修复。
共 2 条评论4 - eyeandroid2019-02-27CI 服务器一旦检查出错,要立即修复。原因很简单,你不修,别人就不能提交,很多人的工作就会因此停顿下来,团队的工作流就会被打断,耽误的是整个团队的工作。 老师,请教下上面这句话我不太理解。我在工作中遇到的CI是针对某笔提交的,某笔提交被CI服务器检查出错只会影响他这笔的提交,其它人可以继续做检查提交。展开
作者回复: 一次一个提交,出错了容易修复,等这次 CI 通过了,下个人再来提交。强调本地检查,就是说,CI 的运行不会影响你在本地工作。把事情做小,做简单,这是我们在任务分解模块的主要观点,前面学的原则,后面也要用啊!
3 - 行与修2019-03-01如果单元测试做的不到位,或者不满足A-TRIP,是不是执行CI的效果就会弱很多? 另外在持续集成的过程中,测试人员或者QA有可能参与其中吗?如果能参与的话,对他们的意义以及他们的贡献会是什么?
作者回复: 说得没错,测试是基础,自动化是基础,CI是一根主线,将诸多实践贯穿起来。 CI强调自动化,测试人员不需要参与到其中。但测试人员可以拿到生成物去测试,找到的问题以测试的形式补充进来。
2 - ifelse2022-04-20持续集成要快速有效反馈。本地检查后在提交ci服务器检查。ci服务器绿色时才可以提交,ci运行报错,必须尽快修复。报错可以高调明显,引起人们的注意。1
- 笨猪2020-06-06本地执行所有测试有点慢怎么办? 郑老师好,您在文章中提到在本地执行CI服务器相同的动作,那么当执行所有的检查花费时间较久时(比如超过5分钟),那么是不是也是打断了心流呢?这种问题怎么破?
作者回复: 本着“快速反馈”为原则,本地测试执行慢,我们就要分析执行慢的缘由是什么。 常见的问题有,集成测试太多,那就要增加单元测试的量,把集成测试的运行放在 CI 服务器上;“单元”测试不是单元测试,可以参考前面关于测试应该写成什么样;模块太大,里面包含了太多的内容,可以考虑做模块的拆分等等。 只有当你知道了问题是什么,才能有效地解决问题。
1 - butterfly2019-05-23公司没有CI的,表示瑟瑟发抖共 1 条评论1
- Xunqf2019-03-03我们团队比较小,开发流程比较野路子,都是刚毕业的大学生,没多少开发经验,我们目前的开发流程是: 代码用GitHub托管,然后我们也用到了Jenkins,但是作为一个移动开发来说,对Jenkins的了解还仅限于自动打包工具,由于一开始使用的是手动打包,每次打一个包都要费好长时间,后来了解到自动打包,就很公司申请了一台电脑,用Jenkins搭建了一个自动打包服务器,然后定时去GitHub拉取代码打包,打包成功后上传蒲公英,然后发邮件通知下载,还不存在老师说的出错了就影响其他人提交的问题,感觉我们的持续集成是在GitHub上,缺失了测试环节。听老师讲完感觉我们做的太简单了,但是老师说的这些服务公司根本就没有,现有的这么简单的东西还是我们自己抽时间搞的,但是我们的主要任务毕竟是开发公司的业务产品,而Jenkins持续集成服务也非我专长,不太可能花太多精力去做这个。这个时候我该怎么办?展开
作者回复: 其实,CI 不应该占用那么长时间,在构建脚本里写好打包过程,在 CI 服务器上调用一下就好了。至于 CI 监视器,网上有很多,找一个现成的拿来用就好了。
1 - 清菊2019-02-27我们遇到的问题是UI测试结果不稳定,这样的话是直接去掉这部分的测试吗?
作者回复: 难道不是把测试修好,让它稳定下来吗?关于测试应该是什么样,我们在前面讲过。
1 - 松鼠工作室2022-10-31 来自四川老师你好,我们团队做的项目很烂很一般,没有用到持续集成这个东西,那么持续集成对我们来说还有必要嘛?如果我想用这个东西来提高我自身的开发效率又应当如何做呢?
- 蜘蛛别过来2022-07-04我是做游戏开发的,绿色状态才提交这个可太对了😂 配置表各传各的,红上加红,一卡就是一下午
- kougazhang2021-11-20最悲剧的是,CI 服务器配置还不行,经常莫名其妙地卡住。
- rocedu2021-02-05https://weread.qq.com/web/reader/65e328b05e10e265eb76e03 《心流》,微信读书可以免费阅读。
作者回复: 很好的补充
- 灯火阑珊2020-11-16我目前的公司就是用邮件反馈持续集成结果😅
作者回复: 恭喜你,中招了。
- Sic Pavis2020-08-14本地验证最大的问题,在于不是每个人都能自觉执行,放在ci上可以流程上确保检查执行。
作者回复: 本地和服务器都要做,本地保证快速,服务器保证必须做。
共 2 条评论 - 时代先锋2020-03-26项目小,开发项目流程不规范
作者回复: 公司越小,越要防坑。
- 时代先锋2020-03-26打卡