Xcode Server 8提示和技巧
Xcode Server —苹果公司用于自动化软件静态分析,单元测试和构建归档的连续集成系统已经存在了一段时间,但它从未得到应有的重视。 从历史上看,设置Xcode Server是一个相当繁琐且耗时的过程。 这使得一些人放弃了与Xcode IDE无缝集成的所有强大功能,并可以替代现有的CI服务器。 今年在WWDC的高级测试和持续集成会议上,Apple宣布了令人兴奋的功能和Xcode Server 8的改进。这些新的增强功能使Xcode Server 8成为您应该考虑在团队中设置的重要工具。
在此博客文章中,我想分享一些在我们团队中设置Xcode Server时学到的技巧。 我希望这些技巧将帮助您使Xcode Server成为开发团队可以依赖并从中受益的强大CI服务器。
免责声明
这篇博文不是分步教程,而是我在设置Xcode Server时学到的最佳实践的全面摘要。 如果您正在寻找详细的分步教程,请查看Honza Dvorsky撰写的大量Xcode Server教程。
另外,如果您仍然不确定自行托管自己的构建服务器以及为什么要在那里使用Xcode Server而不是其他CI服务器(云服务器或自行托管),请查看我之前的文章iOS / Mac开发的自行托管CI。 。
TL; DR
- 专用于Xcode Server的分离机
- 为集成用户创建专用用户帐户
- 为集成用户创建专用的GitHub / Bitbucket帐户
- 在项目中使用Bundler安装确切的Ruby gem和版本
- 在Xcode Server上使用Ruby版本管理器来管理Ruby gem
- 始终在集成前触发器中安装和更新Ruby gems和CocoaPods
- 使用Buildasaur macOS应用进行拉取请求测试
- 使用Fastlane部署在集成前触发器中执行的应用
入门
Xcode Server是一项在macOS Server应用程序中运行的服务,其中包括FTP,Wiki,缓存等其他有用的服务。 它可以从Mac App Store下载,价格为$ 19.99。 但是,如果您已在Apple Developer Program中注册,则可以获取兑换代码并免费下载。
提示1 :我强烈建议您将Mac Mini或Mac Pro专用于CI服务器全新安装的macOS Sierra。 此硬件应固定放置在您公司的场所,以确保隐私,完全控制权和24/7开发团队的可用性。
集成用户
下载macOS Server应用程序后,请确保遵循“设置Xcode服务器”安装指南。 在第4步中( 选择Xcode Server可用于执行集成的用户帐户 ),系统将要求您选择测试用户。 测试用户(集成用户,CI用户,无论您选择如何称呼它)是一个常规用户帐户,将在该帐户下执行所有Xcode Server集成。
提示2 :创建一个新的非管理员用户帐户。 请勿使用您现有的(管理员)帐户,因为您想隔离将在其中执行集成的环境,以消除潜在的安全漏洞。
提示3 :创建一个单独的GitHub / Bitbucket配置文件,并为您的集成用户生成新的SSH密钥。 同样,您希望尽可能地隔离CI环境。
Ruby安装
您的项目可能会依赖一个或多个Ruby宝石-CocoaPods,Carthage或其他任何宝石。 一旦您开始在Xcode Server上拥有多个项目(每个项目使用例如CocoaPods的不同版本),则管理它们不同的gem版本将变得非常麻烦。
提示4 :在您的项目中安装并使用Bundler来安装所需的确切Ruby gem和版本。 只需几分钟即可为您的项目设置Gemfile。
提示5 :在Xcode Server上安装并使用任何Ruby版本管理器来管理多个版本的Ruby gem。 我个人使用并推荐rbenv,它是一个轻量级,易于使用的Ruby版本管理器,可以很好地满足我们开发团队的需求。
机器人配置
选择配置机器人的方式取决于您的项目需求,并且可能因一个项目而异。 开箱即用的Xcode Server机器人可以执行静态分析,运行测试并存档您的应用程序。 这很好,但通常还不够。 您可能还希望执行例如:每次您的bot集成时执行pod install
来安装您的第三方库。 幸运的是,可以将机器人配置为执行某些触发器,例如在集成之前和之后运行自定义脚本。
提示6 :始终在集成前触发器中安装Ruby gems( 提示4 ),更新并安装CocoaPods( 提示5 )依赖项,以确保您的项目处于干净且最新的状态。
想知道为什么source ~/.bash_profile
是集成前触发器的一部分? 我们的~/.bash_profile
包含eval “$(rbenv init -)”
命令,该命令启动rbenv( 提示#5 )。 漫游程序默认情况下不会加载~/.bash_profile
,因此需要通过预集成触发器显式加载它。
提示7 :您的团队是否使用功能分支工作流程? 查看Buildasaur macOS应用程序,该应用程序在您的服务器上运行并观察GitHub / Bitbucket存储库。 然后,它将创建一个新的漫游器,并在每次发布新的PR时开始集成。
快车道
如上一节所述,Xcode Server可以执行静态分析,运行测试并存档您的应用程序。 您可以在集成管道中使用这是一组非常基本的操作。 这是抢救Fastlane操作和插件的丰富集合的地方。 使用Fastlane通道来构成一系列操作,这些操作将在集成过程中执行。
提示8 :对于将应用程序部署到iTunesConnect,我发现不使用任何内置Xcode Server操作并让Fastlane承担繁重的工作很有用。 执行fastlane beta
(用于beta部署的自定义通道)将编译应用程序,增加版本号,上传到TestFlight并通知团队。 在这种情况下,我们的机器人很乏味,因为它的工作是仅执行Fastlane。
结论
Xcode Server已经成为我们iOS团队的隐形成员,它可以对每个请求请求运行我们的单元测试,将新的Beta版本部署到测试人员,并向iTunes Connect提交新的App Store版本-所有这些都是自动完成的,或者只需单击一次按钮即可在Xcode中。 安装Xcode Server 8可能要花费一些时间,但是完全值得的时间和精力。