持续集成:Visual Studio 2008 上的非托管 C++

Posted

技术标签:

【中文标题】持续集成:Visual Studio 2008 上的非托管 C++【英文标题】:Continuous Integration: Unmanaged C++ on Visual Studio 2008 【发布时间】:2009-04-11 04:54:31 【问题描述】:

我花了 4 年时间为一家商业公司使用 Visual Studio 2008 开发 C++;现在是我升级开发流程的时候了。

问题是:我没有 1 按钮构建自动化。我也没有在提交发生时自动构建的 CI 服务器,并且无论构建是否损坏都会通过电子邮件发送给我。更糟糕的是,我们甚至没有一个单元测试!

有人可以指点我如何开始吗?

我看过很多工具,我想我可能会选择:

Visual Build(用于构建自动化)(注意:我也考虑过 Final Builder)

Cruise(用于 CI 服务器)

我现在也刚刚开始练习 TDD...所以我也想自动化我的单元测试。我选择 Google Test/Mock 是因为他们有大量的文档。 (谷歌品牌不会出错吧?=p)

价格不是问题,我想要最好和最容易上手的东西。

对于非托管 MSVC++ 使用真正的 CI/自动化工具的人能否告诉我他们的工具以及我可以如何开始?

我们的源代码控制是 Subversion。

最后一点:我还在考虑直接集成到 VSTD 中的项目管理/跟踪工具 ..并考虑使用 OnTime。 VSTS 成本太高。我试过FogBugz,但我觉得太简单了。还有其他人吗?

【问题讨论】:

我怀疑你在过去 4 年里一直在使用 Visual Studio 2008 ;-) 【参考方案1】:

我会花一些时间认真考虑TeamCity。我们使用 CruiseControl.NET 有一段时间,TeamCity 彻底摧毁了它。此外,它还内置了用于 Boost 和 CppUnit 的插件,因此您的单元测试将免费提供。

最重要的是,该工具对

我刚刚在工作中完成了我们的 C++ 产品的实现,它相当简单。我们使用 msbuild 完成了它,并且基本上使用 msbuild 任务来编译解决方案。其他目标可用于复制文件、运行单元测试等。

【讨论】:

【参考方案2】:

上次我处理一个非托管的 MSVC++ 项目(我可能会添加它的大小适中)时,我们使用 FinalBuilder 进行自动构建和版本控制(甚至还执行 PCLint 和其他分析工具)。

话虽如此,如果您愿意投入时间,MSBuild(或者可能是 nAnt?)可以满足您的所有需求 - 即使是非托管解决方案。

这让我们不得不权衡取舍:Visual Build Pro 和 Final Builder 等工具可让您快速启动并运行。如果您想要提供更大范围定制的东西,您可能会花费大量时间来学习和理解它 - 即 MSBuild、CIFactory、nAnt 等都不是小菜一碟。

所以,如果价格不是问题 - 时间是问题吗?如果时间很宝贵,我会研究 GUI 驱动的工具,它们会带你快速到达你想去的地方。如果您知道您将需要扩展简单的一键构建 + 单元测试 + 部署场景(这种情况经常发生!)然后决定是否可以将时间投入到 MSBuild 等更复杂的工具上?

【讨论】:

【参考方案3】:

我们使用Boost.Build、NAnt、CPPUnit 和Cruise Control.NET 或Hudson 的组合(我们已将它们用于各种项目,但开始更喜欢 Hudson)。

尽管我们正在考虑替换 CPPUnit,但它们都是很好的工具 - 就我所见,Google 单元测试系统非常好。

如果您对仅在 Windows 上运行感到满意,则可以丢失 Boost.Build,而只需从 NAnt 调用 Visual Studio。

关于问题跟踪/项目管理,经过长期调查,我们最终选择了Vision Project。它(目前)还不为人所知,但我们发现它非常适合我们的环境。 Fogbugz 很棒,一个漂亮、清晰的界面,但我们得出的结论是你也这样做了;对我们的需求来说太简单了。

尽管 .NET 世界被这些工具宠坏了,但 C++ 的持续集成仍然很容易设置!如果不安装这些系统,我不会考虑开始一个重要的项目。

【讨论】:

您是否也尝试过 JIRA 用于错误跟踪和 TeamCity 用于 CI 服务器? 分别是和否。似乎可以用 JIRA 做任何事情,有几十个插件和第三方插件可用,但开箱即用,它非常缺乏。更不用说丑陋且通常难以使​​用。 TeamCity 似乎更适合 Java。你的经历是怎样的? 顺便说一句,作为一个澳大利亚团队,我们真的想喜欢 JIRA。 我实际上是在尝试选择一个错误/任务跟踪工具和一个 CI 服务器。我同意你关于 JIRA 的看法。我试过了,它看起来很强大。我现在正在尝试 Vision Project,它看起来不那么混乱了!你见过 CounterSoft 的 Gemini 吗?我倾向于 TeamCity 或 Pulse。 @ShaChris23 没见过 Gemini - 会调查的。我不确定我是否确信需要集成错误跟踪和 CI,但我会看一下,看看优缺点是什么。感谢您的信息。【参考方案4】:

我们使用 subversion + Cruisecontrol + wix 来完成 CI 自动化构建,输出一键式安装程序。这个组合对我们来说效果很好。我们已经为 svn 用户组和权限的管理员创建了自己的站点,并将 Web 界面添加到 cc 中。我们有一个 sql 服务器存储从 svn 和 cc 收集的所有统计数据,并将它们用于我们网站上可用的自定义报告。我们正在寻求添加其他工具来检查存储在 svn 中的代码的各种属性。这个组合对我们来说效果很好。

【讨论】:

【参考方案5】:

在我的公司,我们使用 CruiseControl (http://cruisecontrol.sourceforge.net/)。 Java 版本,而不是 .NET,用于在 Windows 和 OS X 上构建我们的 wxWidgets 应用程序。到目前为止,对我们来说工作得很好。

【讨论】:

以上是关于持续集成:Visual Studio 2008 上的非托管 C++的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt 和 Qt 与 Visual Studio 2008 集成的环境安装说明

将 C++ Win32 控制台项目类集成到 Visual Studio 2008 中的 Visual C++(Windows 窗体应用程序)项目中

Visual Studio Team Services持续集成到Github仓库

静态代码分析器:非托管C ++ Visual Studio 2008

如何在 Visual Studio 2008 中分析 MsTest 的单元测试?

在 Visual Studio 2008 中将 Fxcop 错误显示为编译错误