是否有任何免费或开源的构建系统,您可以自愿使用自己的计算机作为构建代理?我没有遇到过,但我喜欢它的想法。
目标
为需要在所有支持的平台(Windows、MacOS X 和 Linux)上独立构建的特定开源项目设置持续集成(或至少每晚)构建系统。
要求
- 允许任意用户自愿将他们的计算机作为构建系统的新构建代理。
- 支持 Windows、MacOS X 和 Linux 系统作为构建代理(如果构建定义适当地支持它)。
- 允许我将生成的构建输出(例如,通常是二进制可执行文件或库)传输回中央位置。
- 构建系统可以验证自愿代理是否能够运行构建定义,或者可以自动安装必要的工具来实现它。
- 可以监视 GitHub(或任意 URL)的新提交(更改)以启动对可用构建代理的构建推送。
- 如果没有必要类型的构建代理可用,则构建将保持排队,直到可以处理(不过,可能会在几天后从队列中删除)。
我知道我可以通过使用 Amazon Web Services免费套餐设置几个 Amazon EC2 实例来实现大部分目标,但是:
- 它仅免费使用 12 个月
- 它不提供 MacOS X 实例
我从哪里得到这个主意
- jQuery 的TestSwarm:TestSwarm 是一个分布式 CI 设置,用于在多个浏览器中执行 JavaScript 测试。可用的浏览器由用户自愿提供他们的浏览器以“加入 swarm”(本质上是被捕获/连接到 Swarm 并能够接收指令以按需执行给定的测试套件。
- 分布式计算项目,例如斯坦福的Folding@Home软件和伯克利的BOINC基础设施计划。
- Microsoft 的 Team Foundation Server (TFS) Team Build:虽然我通常鄙视 TFS,但它的 Team Build 系统基本上可以满足我的需求,它允许您指定能够运行给定构建定义的构建代理(服务器)池。Team Build 与我所寻求的最大区别在于 Team Build [大概] 仅使用受信任的受控服务器作为其构建代理(相对于随机提供的众包服务器)。
已知问题:安全!
虽然我希望自愿将您自己的计算机作为构建服务器的过程就像自愿将您的浏览器自愿加入 TestSwarm 一样简单,但当允许访问您的实际文件系统和命令处理引擎时,显然存在大量安全隐患:
- 客户端计算机(构建代理)将希望确保构建系统不会尝试在他们自愿提供的计算机上执行任何恶意操作。
- 构建系统将希望确保“不受信任”的客户端计算机(构建代理)不会产生恶意构建输出(例如,使用被破解的 GCC 版本来产生恶意软件/病毒缠身的二进制文件)。这是一个巨大的问题,可能只能通过让构建系统安装自己的软件(la Folding@Home)来解决,该软件将整个构建过程包装起来,这样构建代理就没有任何外部输入来构建(例如不依赖于用户必须安装的其他工具,例如编译器)。否则,构建系统必须至少要求两个不同的构建代理构建相同的二进制文件,以便可以比较和验证输出。