在多个主机上编译

时间:2020-03-06 14:20:15  来源:igfitidea点击:

假设我们正在开发需要在多个主机(例如Linux和Windows)上编译并运行的代码,鉴于以下情况,我们将如何以最有效的方式进行操作:

  • 对于要编译的每个主机,我们都具有完全的硬件访问权限(在我的情况下,我的桌面上是Linux主机和Windows主机)
  • 通过网络驱动器构建太昂贵
  • 不需要提交到中央存储库-假设有一个CI引擎在签入任何内容后立即尝试构建

"有效"是指使编译-编辑-运行周期尽可能短和简单。

解决方案

选择一台机器作为开发箱。

设置另一个自动定期(每小时/每天/任何)从源代码管理进行更新。任何构建/测试失败都应向我们发送某种警告消息。 (通过电子邮件发送,无论如何)。非dev框仍在本地构建,因为它具有自己的树副本。

当然,在进行实际发行之前,我们仍然希望进行人工测试。但这可以使其余时间的生活保持理智。

我们发现,Hudson是一款出色的CI服务器,可以根据需要从源代码控制执行构建。由于它是用Java编写的,因此可以在我们选择的目标平台上运行,并且由于该界面基于Web,因此我们可以在任何地方对其进行控制。有插件可以执行大多数我们想做的事情,而最好的是它是免费的!

为此类任务建立简单的设置非常简单。
我建议Cygwin在Windows平台上使用。这样,我们可以为Linux和Windows平台编写完全可移植的软件/脚本。从职位尚不清楚我们处于哪个阶段,但是假设我们只是开始,我建议我们使用make来构建软件。我们可以使用cron来安排结帐/构建圈子的频率。如果损坏,我们甚至可以发送带有构建日志的电子邮件。
有大量现成的每日构建测试,无论是商业版本还是开源版本,我们都可以在Google上进行搜索,或者有人会在此处添加建议。
我们正在使用自家种植的工具来完成该任务,因此我无法建议任何现成的工具。

好的,我错过了我们不想使用源代码控制系统的意思(这很奇怪,但我们是老板:)),在这种情况下,只需将checkout替换为rsync,其他所有操作都将保持类似。

使用http://ccache.samba.org可以加快编译速度,在大型项目中,只有少数文件发生了更改,

当进行了较大的更改时,请同时利用http://en.opensuse.org/Icecream进行共享的分布式编译。

这可能会大大加快编译编辑运行周期。

我能推荐的最好的东西是一个很棒的跨平台项目,叫做" BuildBot"。

每当我们在源控制系统中签入新修订版时,BuildBot都会自动在我们支持的每个平台上进行构建。让它在OSX,Linux(ubuntu),Linux(debian),Linux(Redhat),Vista,Windows XP等平台上构建,并在构建失败时发送电子邮件或者我们喜欢的任何内容。

作为构建过程的一部分,如果测试通过,则可以发布二进制文件。对于"每晚"或者"出血边缘"构建很有用。

以下是一些网址:

  • Buildbot.net主页
  • Python.org的buildbot

由于我们正在使用CI,因此我假设我们已经正确设置了构建过程。我们正在做的是,我们将Windows机器用作开发机,而CI在Solaris上运行。这样可以确保代码在多个平台上都能很好地编译。该代码是用Java语言编写的,我们不使用任何本机库,因此可以保证该代码可以正常工作。
我们在工作中使用Bamboo很棒,但不是免费的:-)

对于我的私人项目,我一直在使用Continuum,但是Husdon看起来很整洁(我会尝试一下),感谢Peter。

其他答案中提到的大多数构建服务器都从版本控制系统中签出我们所做的更改。考虑到"不需要提交中央存储库"的要求,建议我们尝试使用Jetbrains TeamCity CI服务器。

它具有Visual Studio和Eclipse插件,并允许我们请求"私有构建",将更改直接发送到构建服务器。对于每个项目,我们可以定义许多具有不同要求的构建配置(OS是可能的要求之一)。如果构建成功,则插件将提示我们提交更改。

免费版本支持3个代理,如果需要,我们可以购买更多。

看起来Pulse也具有相同的功能,但是我没有亲身经历。

一种选择是Cascade,它允许我们通过在服务器上"检查点"在提交之前(而不是提交之后)在所有平台上测试更改。

一个词:巡航(不是巡航控制)非常好。

我们可以免费获得两个代理,每个平台一个代理。从Mac和PC上进行安装实际上需要几分钟的时间,从我听到的信息来看,在Linux上还不错。