用Bamboo加快迦太基的建造

迦太基是一个出色的依赖项管理器,但是,当项目变得复杂时,构建时间可能会受到影响,尤其是在诸如CI之类的CI环境中。 本文详细介绍了我为缓解这些问题而开发的工作流程。

步骤1:配置链接的存储库

在我们的构建环境中,我们使用两组链接的存储库-一组专门用于迦太基,而另一组用于常规代码更改。 仅当检测到对CartfileCartfile.resolved的更改时,工件特定的配置才会“运行”。 含义是要么更新了现有的依赖关系,要么添加了新的依赖关系。

在我们的构建配置中,我们使用Fastlane,它会在进行更改时自动添加标签“ fastlane的构建版本碰撞…”,我们特别将其添加到排除变更集,这样我们就不会以循环构建循环结束。 如果您不使用Fastlane,则不需要此行。

对于主存储库,我们将仅包含匹配的更改切换为排除与以下模式匹配的所有更改 。 这意味着,如果提交修改了Cartfile ,它将不会触发构建。

步骤2:计划设定

对于我们正在开发的每个ios应用程序,我们使用2个计划:一个应用程序-工件计划和一个应用程序构建计划。 实际上,我们还有其他计划来处理不同的分支和部署,但这超出了本文的范围。

构建计划:应用程序-工件

Artifacts计划负责运行Carthage并生成所需的项目依赖项。 我们发现此步骤运行起来很慢,而且不需要经常发生。 要配置此计划,您需要确保将其指向步骤1中配置的Artifacts存储库。 如下配置计划:

它具有一个单阶段和一个带有两个任务的 作业源代码签出和一个运行以下命令的脚本

 迦太基引导程序—平台ios —无用二进制文件 

然后确保定义一个共享工件,例如:

运行carthage bootstrap时,它将依赖项下载到Carthage / Checkout文件夹中,然后将框架构建到Carthage / Build文件夹中。 因为我们只需要框架而不是源,所以我们仅在工件中包含Carthage / Build目录

建设计划:申请

该计划链接到在步骤1中配置的主存储库,负责日常构建应用程序。 除非您更改Cartfile中的内容,否则此计划将在每次推送的提交上运行。

在配置计划时-添加工件下载任务并选择上面定义的共享工件。 这将使用Carthage / Build文件夹填充您的构建目录,该文件夹将具有构建所需的所有正确动态框架。

关于如何配置适合您的构建任务-无论您使用Fastlane,xcodebuild还是xctool。 如果您使用Fastlane,请确保没有在Fastfile中调用迦太基任务,否则将重复所有迦太基工作。

触发建筑

最后一步是返回到“ Application-Artifacts”构建计划,并编辑“ Dependencies”选项卡,并确保该计划将在每次构建时触发“ Application”构建计划。 这样,如果更新了Cartfile,它将自动使用更新后的依赖项重新构建主应用程序。

摘要

在我们的环境中,我们发现在实施此构建方案之前需要花费多达40分钟的构建时间。 与主线代码相比,我们对迦太基的依赖关系更新的频率要低得多,并且通过分离这两个任务,我们能够将主构建时间缩短至<10分钟,而构建工件可能需要30-35分钟。