Version control 究竟什么才是“考虑的对象”;破坏构建?”;

Version control 究竟什么才是“考虑的对象”;破坏构建?”;,version-control,build-process,continuous-integration,Version Control,Build Process,Continuous Integration,在CI环境中,什么才是损坏的构建 我可以想象有几个答案(编译、测试通过、指标在范围内、文档存在等的任意组合),但我不确定哪一个是cannoncial 例如,就在今天,我碰巧签入了所有代码更改,但忘记提交VisualStudio项目文件,从而破坏了单元测试。(尽管我确实三次检查了我的提交,因为这是谷歌代码上的一个公共OSS项目) 在我第一次提交后的一分钟内,我很容易就能解决这个问题,但是我现在应该把自己当成一个断路器吗?p> 如何配置您的CI环境:是每个版本都已生成,还是在每个完整版本后仅生成最新

在CI环境中,什么才是损坏的构建

我可以想象有几个答案(编译、测试通过、指标在范围内、文档存在等的任意组合),但我不确定哪一个是cannoncial

例如,就在今天,我碰巧签入了所有代码更改,但忘记提交VisualStudio项目文件,从而破坏了单元测试。(尽管我确实三次检查了我的提交,因为这是谷歌代码上的一个公共OSS项目)

在我第一次提交后的一分钟内,我很容易就能解决这个问题,但是我现在应该把自己当成一个断路器吗?p> 如何配置您的CI环境:是每个版本都已生成,还是在每个完整版本后仅生成最新版本,还是使用基于时间的新版本检查?

对于我们,在新提交后测试套件失败时,我们使用术语“断开版本”


因此,在您的例子中,是的,您会破坏构建(至少根据我们公司的说法)

破坏构建就是提交任何使部署项目不可能(或可能但不明智)的更改

修复损坏的构建不会修复损坏的构建,但可以创建新的未损坏的构建


我将CI服务器配置为在每次提交时创建最小生成,并在每次提交时创建最大生成。周期取决于在项目中工作的人数(越多的人提交越多)和构建持续时间(您可以每次运行单元测试套件,但每天运行一次或两次30分钟的验收测试套件)

破坏生成会阻止任何依赖与CI环境相同的标准工具和代码集的用户获得编译和运行系统

如果您的同事在更新系统时无法编译系统,因为缺少某些配置,那么构建就会中断,不是吗

如果您的同事不能确信单元测试通过,因为其中一个是不可靠的,那么构建就被破坏了,不是吗

如果您有自动性能测试,并且您的项目必须进行优化,我甚至会说,如果您的代码运行速度不够快,您已经破坏了构建(但这是有争议的)

对于代码覆盖率或其他指标,例如,我不会那么在意


破坏构建可能会发生。CI只是为了确保它不会在你应该发货的那天发生太多;)

一个坏的构建就是任何不能通过自动测试套件的东西

你是个身材破坏者这不是什么大问题,只要你能尽快解决。CI环境的全部目的是捕获bug,而不是让人们害怕提交

我的公司为每个正在生产或即将生产的分支机构制作尖端。我们在每一次提交时都会这样做,每天早上4点都会这样做。我们使用的是Mercurial,所以这里提交意味着推动对集成回购的更改。

理想情况下,您必须

  • 计划每晚运行的自动脚本,用于从源代码构建应用程序

  • 脚本,用于将二进制文件复制到一个目录/目录集,如果应用程序正在您的环境中运行,则可以从该目录/目录集运行另一个脚本以部署该应用程序,或者用于为客户创建可交付成果

  • 运行并验证所有组件通过所有测试的自动化测试套件

  • 验证生成是否正确生成的自动脚本

  • 自动脚本/监控系统,在验证脚本失败时发出警报

  • 当上述过程生成警报时,则视为“破坏构建”


    但由于程序/流程因公司而异,因此可能会有其他定义。在某些地方,它可能会破坏单元测试。另一些可能是由于签入源代码而导致代码无法编译。

    只要您因为一个简单的人为错误(例如忘记提交某些内容)而破坏了构建,并且只要这是一个例外而不是规则,我会说这是可以的。只要您注意快速修复此问题:)

    另一方面,如果有人在提交之前没有在他/她的机器上本地执行完整的构建,从而经常破坏构建,那么这是一个缺乏纪律的团队成员的迹象,他并不真正关心其他团队成员和开发过程


    我的经验是,让人们更加小心的一种有效方法是设置您的CI服务器,以便在(且仅当)生成状态更改时发送电子邮件,其中“罪犯”在收件人:列表中,其他团队成员在抄送:上。我想你们可以称之为“羞耻因素”;)

    只有当团队有耐心等待一整天以确认所做的更改时,这才是理想的。我认为“理想”应被视为“理想,至少…”。通常在签入后可以非自动运行这样的脚本,事实上,您希望这样做,以避免破坏构建。然而,在大多数商店里,除非自动夜间脚本失败,否则它不会被视为“破坏构建”。该死,你已经说过“它取决于”部分了。对我来说,我敢肯定大多数人,如果一个构建没有构建(=编译),那么它肯定被认为是坏的。除了液晶显示器,还得看情况。虽然“文档不存在”可能不是。。。因为这并不像自动检查那么简单。