题
假设您正在开发需要在多个主机(例如 Linux 和 Windows)上编译和运行的代码,考虑到以下情况,您将如何以最有效的方式做到这一点:
- 您可以完全访问正在编译的每个主机的硬件(在我的例子中,我的桌子上有一台 Linux 主机和一台 Windows 主机)
- 通过网络驱动器构建太昂贵
- 不需要提交到中央存储库——假设有一个 CI 引擎,一旦签入任何内容,就会尝试构建
“高效”意味着保持编译-编辑-运行周期尽可能短和简单。
其他提示
我能推荐的最好的东西是一个很棒的跨平台项目,名为“BuildBot”。
每次您将新修订签入源代码控制系统时,BuildBot 都可以自动在您支持的每个平台上进行构建。让它在 OSX、Linux (ubuntu)、Linux (debian)、Linux (Redhat)、Vista、Windows XP 等上构建,并在构建失败时发送电子邮件或您喜欢的任何内容。
作为构建过程的一部分,如果测试通过,您可以发布二进制文件。对于“每晚”或“前沿”构建很有用。
这是一些网址:
我们发现 哈德逊 是一个很棒的 CI 服务器,可以根据需要从源代码控制执行构建。由于它是用 Java 编写的,因此可以在您选择的目标平台上运行,并且由于界面是基于 Web 的,因此您可以从任何地方控制它。有插件可以完成您想做的大多数事情,最重要的是它是免费的!
选择一台机器作为您的开发盒。
将另一个设置为定期(每小时/每天/无论何时)从源代码管理自动更新。任何构建/测试失败都应该向您发送某种警告消息。(电子邮件,即时通讯,等等)。您的非开发框仍在本地构建,因为它有自己的树副本。
当然,在进行真正的发布之前,您仍然需要进行人工测试。但这可以让生活在其余时间保持理智。
使用 http://ccache.samba.org 在较大的项目中只有少数文件发生变化的情况下加快编译速度,
当发生重大变化时,利用杠杆 http://en.opensuse.org/Icecream 同时进行共享分布式编译。
这可能会显着加快你的编译-编辑-运行周期。
由于您正在使用 CI,我假设您已经正确设置了构建过程。我们正在做的是使用 Windows 机器作为开发机器,CI 在 Solaris 上运行。这确保了代码在多个平台上都能很好地编译。代码是用 Java 编写的,我们不使用任何本机库,因此可以保证代码能够正常工作。我们在工作中使用 Bamboo - 它很棒,但不是免费的:-)
对于我的私人项目,我一直在使用 Continuum,但 Husdon 看起来很整洁(我会尝试一下) - 谢谢 Peter。
为此类任务构建简单的设置非常简单。
我会建议 西格文 可在Windows平台上使用。这样您就可以为 Linux 和 Windows 平台编写完全可移植的软件/脚本。从您的帖子中不清楚您处于项目的哪个阶段,但假设您才开始,我建议使用 制作 构建您的软件。您可以使用 cron 来安排签出/构建周期的频率。如果构建日志损坏,您甚至可以发送包含构建日志的电子邮件。
有许多现成的商业和开源每日构建测试,您可以通过谷歌搜索,或者可能有人会在此处添加建议。
我们正在使用自制工具来完成该任务,因此我无法建议任何现成的工具。
好吧,我错过了一点,你不想使用源代码控制系统(这很奇怪,但你是老板:))在这种情况下只需用 rsync 替换签出,其他一切都保持相似。
一种选择是 级联, ,它允许您通过在服务器上“检查点”来在提交之前(而不是之后)在所有平台上测试您的更改。
一个词: 巡航 (不是巡航控制)非常好。
您可以免费获得两名代理,每个平台可以获得一名一代理。在 Mac 和 PC 上安装实际上需要几分钟的时间,据我所知,在 Linux 上设置也不算太糟糕。