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