经常持续构建和敏捷与提交

Mar*_*ood 6 version-control agile continuous-integration

我现在只是在Agile进行一些正式的培训,我遇到的一个问题是关于持续构建的价值与经常提交到版本控制系统的价值.

我对版本控制的理解是经常提交它更好,因为那时你有历史和能够以细粒度的方式回到以前的变化.

我对敏捷和持续构建的理解是,它会给开发人员施加压力,使他们始终拥有工作代码.打破源树是一个禁忌的事情.

现在我同意这两种观点,但有时候这些观点可能会相互影响.您可能正处于较大的代码更改过程中,并希望提交代码以确保您具有历史记录,但这会破坏源代码树.

有没有人对此有任何想法?

Noo*_*ilk 10

在大多数源控制系统中,分支/标签解决了这个问题.

它们允许您标记或仅仅"分支"(双关语)代码段/修订版,并将其作为"稳定版本".然后,您可以将更改提交到主干,或"补丁"分支或其他方法.

这两个概念共同发挥作用.


Eri*_*ick 10

什么可能不是一个关于某些事情出错的禁忌?我认为禁忌是让构建破坏而不是破坏构建.偶尔的构建破坏是可以的.这正是您运行连续构建和测试的原因.CI构建/测试确定构建何时被破坏,理想情况是谁破坏了它.这可以确保快速修复.如果偶尔发生这种情况,你就可以了.如果它每天发生二十次,团队可能会遇到麻烦.

禁忌是干扰其他人完成工作.当你打破构建时,他们会收到一封电子邮件,说"我们的源代码分支被破坏了".他们将无法将其他人的更改或更改与主线集成,直到他们收到所有明确的电子邮件.

在这种不断整合的环境中工作的真正挑战是:1)保持团队规模小.一般来说,在大约25名开发人员加入团队后,我们开始看到麻烦 事情开始变得脆弱.使用团队级别的分支,组件或具有流的多阶段CI可以帮助更大的团队进入较小的团队.

2)选择小单位的工作.通常不应该在定期检查改进和不破坏一切之间存在冲突.当进行小的工作变更时,应该完成提交.新功能可能尚未向用户公开,但如果进行的连贯API更改不会中断测试,请检入.

3)快速,准确的构建.当构建变得更快时,团队往往会有更多的竞争条件.加上可重现的构建将确保开发人员在自己的机器上进行构建(她有时间做,因为它很快)可以合理准确地预测提交成功.


Bil*_*l K 5

实际上,一种常见的敏捷哲学(我实际上对此非常满意)是"如果你在回家之前无法承诺,那就回复了."

起初这听起来很残酷,所以我通常首先在本地复制我的源树或分支它,然后我回到我开始的地方.第二天,我开始工作.它通常变得非常快,我改进了前一天所做的事情,我很少看到副本(好吧,有时候我会撤回一些我已经"完成"的课程,并确保并重新整合它们.

我几乎没有必要在没有登记的情况下超过几个小时.我尝试使用重构(它们总是很短且无害或者它们不是重构)并且我添加代码以使事情不会破坏.这可能涉及添加经过测试的代码(新方法或对象)并在链接其余代码之前将其检入.

总的来说,您的单元测试应始终运行.我倾向于每分钟进行几次测试,每十分钟进行一次.

采取小步骤可能需要更长的时间,但你将避免那些3-4天的代码重写会话,你不能进行任何测试或检查,这些可能是残酷的,浪费大量的时间!