是否有任何工具可以使git构建每个提交到单独存储库中的分支?

时间:2010-03-27 16:28:40

标签: unit-testing git build-process continuous-integration build-automation

需要符合以下规格的git工具。一个人已经存在吗?如果没有,我将创建一个脚本并使其在GitHub上可供其他人使用或贡献。有没有一种完全不同的更好的方法来解决构建/测试每个提交到git存储库中的分支的需要?不仅是最新的,而且每个人都回到了某个起点。

背景:我们的开发环境使用独立的持续集成服务器,非常棒。但是,仍然需要在每个开发人员的PC上进行本地完全构建,以确保在推送到CI服务器时提交不会“破坏构建”。不幸的是,通过自动单元测试,这些构建会迫使开发人员每次等待10或15分钟进行构建。

为了解决这个问题,我们在每台开发者PC上设置了一个“镜像”git存储库。所以我们在主存储库中开发,但任何时候都需要本地完整构建。我们在镜像存储库中运行几个命令来获取,检出我们想要的提交和构建。它非常可爱,所以我们可以继续在主要工作中继续工作。

现在只有一个主要问题。我们希望确保每个提交都构建并通过测试。但我们经常忙着疏忽建立几个新的提交。然后,如果构建失败,你必须做一个bisect或手动构建每个临时提交,以找出哪个中断。

此工具的要求:

  1. 该工具将默认查看另一个repo,origin,获取并将分支中的所有提交与2个提交列表进行比较。一个列表必须保存成功构建的提交,其他列表提交失败。

  2. 它识别任何列表中尚未提交的任何提交,并开始按照提交的顺序在循环中构建它们。它停在第一个失败的地方。

  3. 该工具在尝试构建每个提交后,将每个提交适当地添加到成功列表或失败列表中。

  4. 该工具将忽略成功列表中最早提交之前的任何“遗留”提交。这个逻辑使下一点成为可能的起点。

  5. 起点。该工具构建一个特定的提交,如果成功,它将被添加到成功列表中。如果它是成功列表中最早的提交,它将成为“起点”,以便在此之前没有任何提交检查构建。

  6. 只支持线性树吗?就像bisect一样,这个工具最适用于提交树,至少从它的起点开始,线性没有任何合并。也就是说,它应该是一个完全通过rebase和快进提交构建和更新的树。

  7. 如果它在分支中的一次提交失败,它将停止而不构建在该分支之后的其余部分。相反,如果只是转移到另一个分支,如果有的话。

  8. 默认情况下,该工具必须执行一次这些步骤,但允许参数循环使用一个选项来设置循环之间的秒数。其他工具如Hudson或CruiseControl可以做更多花哨的调度选项。

  9. 该工具必须具有良好的默认值,但允许可选控制。

    1. 哪个回购?默认情况下来源。

    2. 哪个分支机构?所有这些都是默认的。

    3. 什么工具?默认情况下,由存储库的根文件夹中名为“buildtest”,“buildtest.sh”“buildtest.cmd”或“buildtest.exe”的用户提供的可执行文件。

    4. 循环延迟?默认情况下运行一次,并在迭代之间经过几秒后循环选项。

1 个答案:

答案 0 :(得分:13)

我写了一个名为git test-sequence的工具,一段时间就是这样做的。

我只是在考虑写博客,因为一位朋友告诉我这周为他节省了大量工作。