C++的本地持续集成系统?

Posted

技术标签:

【中文标题】C++的本地持续集成系统?【英文标题】:Local continuous integration system for C++? 【发布时间】:2012-12-23 06:03:27 【问题描述】:

“本地持续集成系统”可能不是正确的术语,但我希望找到的是一个持续集成系统,可以配置为监控本地文件(特别是 C++ 文件)的更改,并且 1)尝试编译受影响的目标文件(在第一次失败时停止),如果成功并且没有新的源文件更改 2) 链接受影响的二进制文件,如果成功并且没有新的源文件更改 3) 运行受影响的测试。

通过监控本地文件的更改,我并不是指监控对修订控制系统的提交,而是本地文件在保存时的状态。理想情况下,系统将提供与源代码编辑器的集成,以便它可以监控编辑器中尚未保存到磁盘的更改。

理想情况下,它还可以提供当前和最近状态的图形指示(最好在 Windows 7 上),以便在需要时快速钻取故障。

我发现最接近的东西是nose,正如here 所述,但这仅涵盖运行 Python 测试而不是构建 C++ 文件。

【问题讨论】:

【参考方案1】:

与您正在寻找的最接近的是cdash 和Boost test bench;我认为像您正在寻找的工具这样的工具永远不会存在于 C++ 中,因为在编辑单个文件后编译每个项目只会在高效的 C++ 工作流程中浪费时间。

【讨论】:

我赞成通过分享松散相关的链接来增加讨论,但我不同意它永远不会存在的评估。我认为如果最近发生变化,重新开始建设应该是可行的。此外,我的目标是通过最大限度地减少开发人员(即我)等待构建完成所需的时间来用机器时间换取开发人员时间。 将您的代码库拆分为多个库,这是在整个工作流程中花费更少时间的有效方法,请记住,您的每一次更改都会引入错误,如果您采用单一方法,您会后悔的. 根据我的经验,这种方法仍然不会像使用 Python 甚至 C# 时那样缩短等待时间。当我最近回到一个比我刚刚研究的 C++ 代码库更大的 Python 代码库时,这种明显的差异真的让我印象深刻,我注意到解释 Python 代码和运行测试的时间更少了 4 次不同的时间(CPython、IronPython w/ 2 个不同的标志和 Jython)然后它需要为一个平台的调试配置构建更小的 C++ 代码库。【参考方案2】:

如今,集成是一个新兴概念,因此您并不孤单。

假设您在 Windows 上进行开发,如果您使用的是 Microsoft Visual Studio 你可以考虑微软的Visual Studio Team Foundation Server (TFS) (以前 Visual Studio Team System)。 这将在一个软件包中为您提供 Source-ControlBuild-Automation, 与 Microsoft 产品完美集成,当然 (我认为 MSDN 用户有免费版本)。

如果不热衷于 Microsoft 产品,或者只是在寻找构建自动化, 我会推荐一个很棒的 Open-Source Continues Integration 工具:Jenkins CI

祝你好运!

【讨论】:

【参考方案3】:

我会看看 Jenkins CI——它是一个很好的工具,可以在任何平台上运行,并且可以配置为执行几乎任何操作。我用它来运行与手机通话、拨打电话并记录这些电话的 Python 代码(并测试了通话的“质量”,尽管我的项目从未获得过真正质量的软件,因为我们只是展示了一个概念),然后 Jenkins 会生成“效果如何”的图表。

您也可以执行您所描述的“链接” - 因此它会发现您的源已更改,尝试构建它[通常这是使用 make 完成的,因此它会在第一个错误文件处自动停止(尽管它一个文件中可能有数百个错误!)]。编译并构建成功,然后链接到运行测试。不完全确定您如何确定什么是“相关的”。如果您的测试周期不是很大,我会全部运行!

【讨论】:

以上是关于C++的本地持续集成系统?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式 C++ 系统中的持续集成/单元测试

明晚九点|发布系统演进与持续集成

Linux企业运维——持续集成与持续交付

Linux企业运维——持续集成与持续交付(上)

Linux企业运维——持续集成与持续交付(上)

Dubbo分布式系统架构,持续集成篇 Maven私有库和本地库的安装与配置 Sonatype Nexus + Maven