Xcode服务器和机器人

自从Xcode 5推出以来,我一直对Apple的持续集成产品感到非常好奇。当时,我发现它不适合我从事的项目。 虽然我一直在关注它的进展,但自上次尝试以来已经过去了将近五年。

我有机会使用许多CI系统:Jenkins,Cruise Control,TeamCity,TravisCI和CircleCI。 其中,我更喜欢TravisCI。 特别地,我真的很喜欢将所有配置都保留在仓库本身中的模型。 我还发现他们的系统既可靠又有能力。 但是,对于封闭源项目,TravisCI相当昂贵。 因此,我配备了新的Mac mini,以为我会再次尝试Xcode Bots。

安装

安装Xcode Server非常简单。 只需下载Xcode,启动它,然后单击“开关”即可。

完成此操作后,将引导您设置用户以供服务器使用。 我喜欢为CI系统使用专用用户帐户的想法,这是一种常见的方法。 虽然我确实是在单独的机器上进行设置的,但我认为这对于单机设置也可以正常工作。

创建一个机器人

“ Bot”一词有点奇怪,但在其他系统中大致对应于“ job”或“ project”。 Xcode有一个向导,它将指导您完成该过程。 我有种感觉,尽管这个向导在第一次尝试时,即使是适度的复杂性,大多数项目也无法实现。 在让我的第一个Bot成功工作之前,我经历了许多错误的开始。 公平地讲,这是我几乎已经完成的所有CI工作的经验。 也许我运气不好…

我遇到了两个问题。 首先是我的Bot无法访问所需的git存储库。 第二个是设置和安装构建所需的依赖项。 解决这些问题并不需要太多工作。

Git仓库和SSH

毫不奇怪,Bot需要能够检出您的代码,然后才能执行其工作。 Bot配置有一些不同的选项可用于检出其存储库。 您可以在Bot创建UI中配置许多不同的基于SSH密钥的设置。 我选择使用“特定于Bot的SSH密钥”选项。 这提供了一个公共密钥,我使用该密钥来使机器人访问存储库。

至此,我的Bot已成功签出并构建了我的项目。 但是,由于缺少依赖关系,构建立即失败。

依存关系

我使用迦太基管理项目中的依赖项。 我也不会将任何依赖项源或工件检入源代码控制中。 这意味着仅检查源代码不足以构建项目。

机器人程序有一种机制,被称为“触发器”,可以运行集成前和集成后的脚本。 这些采取由Xcode Server用户帐户执行的bash脚本的形式。 这是安装依赖项并照顾其他环境设置的理想方法。 但是,就我而言,依赖管理器本身需要首先安装。

我通过登录到构建机器并通过自制程序安装Carthage来完成此操作。 这使迦太基对机器的所有用户可用。 但是,这还不够,因为Xcode Server用户仍无法访问Carthage存储库。 事实证明,集成前触发器与签出存储库所使用的每机器人SSH密钥不同。

我感觉这可能可以解决,但是我不知道如何在不对路径进行硬编码的情况下访问Bot的SSH密钥。 因此,我只是以Xcode Server用户身份登录,并为此目的生成了新的SSH密钥。 我还设置了一个简单的默认SSH配置。

 托管my.git.host 
AddKeysToAgent是
UseKeychain是
IdentityFile〜/ .ssh / id_rsa
用户scmuser

所有这些都是必需的,因为我需要访问一些非公共存储库。 如果您只有可公开访问的依赖项,那么我认为您不必担心这种额外的SSH配置。

Bot /集成UI

我实际上真的很喜欢UI。 机器人和集成屏幕都很棒。 一切都非常可读,图表也很好。 我也非常喜欢自上次运行以来发生的变化的易于理解的摘要。

但是,这也不是个好消息。 Bot UI有点被埋在Xcode界面中。 我只能在“报表浏览器”中找到它。 一旦到达目的地,加载速度始终很慢。 我怀疑这是由于从远程服务器获取了所有信息。 最后,这些屏幕在13英寸MacBook显示屏上的显示效果也不尽如人意。

UI测试

当苹果发布他们的新UI测试系统时,我感到非常兴奋,并且为它也支持macOS而感到震惊。 虽然UI测试可能是编写上的真正挑战,但它们可以为您的应用程序中难以测试的部分提供宝贵的覆盖范围。

在macOS上,UI测试可以在计算机运行时对其进行接管。 除非您只是停下来让它们运行,否则很容易意外触发测试。 充其量,这是震撼和破坏性的。 而且,由于它们可能真的很慢,因此可能成为巨大的开发瓶颈。

我很高兴看到UI测试与Bots完美配合。 对我而言,仅此一项就值得入场。

我跳过的事情

Bots似乎可以做一些事情,但是我还没有玩过。 Bot可以存档构建,并将其添加到Xcode组织者中。 漫游器还可以通过电子邮件发送运行结果和配置项状态摘要。 而且,说到状态,这就是一个光滑的基于Web的UI,您可以将其放在大屏幕上。

结论

持续集成的承诺确实很棒。 您可以自动化开发周期中繁琐的部分,因此它们总是会发生,并且会以可重复的方式进行。 当然,对于复杂的系统,要使(并保持)这种自动化工作可能需要很多工作。 我喜欢将CI称为持续虚假fur

如果您是CI的老手或有一个复杂的项目,那么您将发现Xcode Server的限制。 这是一个简单的系统,并且需要大量的Shell脚本来实现更复杂的流程。 但是,如果您有一个运行时间较长的测试套件和一台备用计算机,我建议您给Bots试一试。 我很喜欢


不过,这是一个重大警告。 如果苹果的说明文件页面有任何迹象,Xcode Server 似乎即将淘汰。 这很可能与苹果在2018年初收购Build Buddy有关。我很期待看到这一领域的发展。

雷达场

46124880:应在触发器中访问Bot SSH公钥
46144626:Bot UI中未报告代码覆盖率失败
46124988:Bot UI几乎无法安装在13英寸MacBook显示屏上
46144781:Bot公共ssh密钥文本字段被截断