代码之家  ›  专栏  ›  技术社区  ›  Halt

增量构建与持续集成结合起来是否可行?

  •  4
  • Halt  · 技术社区  · 15 年前

    连续构建被设置为执行增量构建(夜间构建是完整和干净的)。

    如果开发人员在生成启动(触发提交)之后,但在使用该文件的对象生成之前第二次更改并提交文件,则会出现问题。现在,对象文件获得了第二次提交的时间戳之后的时间戳。这将导致以后的所有增量生成跳过对文件的更改。

    为了更加清晰,这里是时间线:

    T1:开发人员提交file.cpp(file.cpp有时间T1)
    T2:第一个增量生成在生成服务器上启动
    T3:生成服务器获取最新更改的文件(T1处的file.cpp)

    T5:Buildserver将T1的file.cpp编译为file.obj(现在file.obj有时间T5)
    T6:首次建造完成(结果良好)
    T7:在生成服务器上启动第二个增量生成
    T8:生成服务器获取最新更改的文件(位于T4的file.cpp)

    现在的问题是:

    T9:生成服务器不会将file.cpp(属于T4)编译为file.obj,因为file.obj属于T5,因此编译器认为它比源文件新。

    增量构建与持续集成结合起来是否可行?

    1 回复  |  直到 12 年前
        1
  •  2
  •   EricMinick    15 年前

    是的,你肯定有比赛条件。我想你可以试着通过询问变更日志,触摸其中列出的任何文件来变得聪明一些——或者更好的是,如果支持的话,让Subversion不保留文件修改时间,而是让文件的日期戳是它们被更新的位置。

    我在这方面看到的一个问题是,大多数时候只运行增量构建,但有一部分构建运行干净(可能是每晚)。你可能会周期性地陷入这种比赛状态,但你会定期地摆脱它。取决于这种情况发生的频率,这种混乱可能已经足够好了。