使用CI / CD服务构建和部署项目

几个月前,我开始阅读有关CI / CD的文章,但是自上个月与朋友一起开始新的个人项目以来,我再也没有机会在项目中使用过它。

但是什么是CI / CD?

CI或持续集成是一种将代码不断集成到您的应用程序中的能力,这意味着您每天/每周或您希望在任何其他时期将新功能和/或修补程序推送到您的仓库中。

持续集成(CI)是一种每天将所有开发人员工作副本合并到一条共享主线的实践(维基百科)

CD或持续交付是一种能够安全,快速地连续发布软件的新版本的功能。

持续交付(CD)是一种软件工程方法,团队可以在短时间内生产软件,以确保可以随时可靠地发布软件(Wikipedia)

连续交付是一种以可持续的方式安全 快速 将所有类型的变更(包括新功能,配置变更,错误修复和实验)投入生产或交付用户的能力 。 (continousdelivery.com)

为了实现这一目标,我们将使用像git(gitlab,github,bitbucket)这样的版本控制系统,开发人员可以将他们的工作推送到发布分支,他们的CI服务将提取该代码,构建,测试并将我们的应用程序部署到beta用户。

我们开始在Google上寻找CI,并发现了一些有趣的服务,例如Travis,Buddybuild,Bitrise,CircleCI和Jenkins。

Travis是免费的开放源代码项目,具有不错的UI,但这是一个私人项目,Travis没有免费的私人回购计划。

Buddybuild是我们的最爱,我们之前使用过它,并且在私人项目上免费使用。 不利的一面是为免费用户建立队列的等待时间很长,但是我们可以忍受。

我们没有尝试使用Bitrise,CircleCI或Jenkins。

对于这个项目,我们决定使用支持私有仓库和Buddybuild的Gitlab。

建立分支机构

我们有两个分支,将用于为我们的用户生成应用。 我们有一个开发人员分支将生成一个beta应用程序,一个主分支将生成一个AppStore应用程序。 您可以拥有多少个分支,例如,生产前分支或alpha测试员分支。

考虑到这一点,我们需要创建并保护这些分支,以便没人能向其中推送一些代码并最终破坏应用程序。

首先,我们需要创建一个新分支,您可以转到您的仓库并选择分支 ,然后选择新分支。

要保护分支,您需要选择设置进入存储库 向下滚动到“ 受保护的分支机构” 。 选择一个分支,然后选择将能够合并和推送的角色。 之后,您的分支将获得受保护的标签。

保护分支意味着没有人可以直接通过Pull Request(PR)或Merge Request(MR)将代码直接推送到该分支,这意味着在该项目上,一旦它被开发,我们将在另一个分支中开发新功能/修复。完成后,我们将其推送到Gitlab,他们创建了一个MR,以将该新功能/修复程序合并到开发人员中。

构建我们的应用

我们选择Buddybuild作为CI服务,因为它:

  • 与Gitlab轻松集成。
  • 私人回购是免费的,即使我们需要等待很长时间才能进行构建(有时等待时间约为一小时)。

在Buddybuild上创建帐户时,您可以选择将其与gitlab,github或bitbucket链接。 选择您的git服务,它将自动扫描应用程序。 它可以轻松,轻松地设置您的项目,完成后您将看到分支。

如果选择更多 -> 应用程序设置 ,则可以配置分支机构设置以及更多。

首先,我们要在不是开发人员或管理员的任何分支上禁用推送,因为我们将仅构建MR / PR,而不构建推送。 如果要构建推送,请启用此选项。

您可以在Buddybuild上设置很多配置。 如果您想了解更多信息,建议您阅读文档。

现在,每次创建新的MR / PR Buddybuild都会被触发并构建您的应用程序。 如果一切正常,它将克隆您的仓库,运行测试和自定义脚本,构建将成功

每当构建触发gitlab时,都会通知您,您会看到正在运行管道。

测试您的应用

在您的应用程序上测试所有内容,使用CI / CD服务时非常重要,因为您需要确保一切正常。 我们需要告诉Buddybuild我们的项目有一个测试目标,并且它应该在每个版本上运行我们的测试。 为此,只需在分支上启用测试。

您也可以在设置上选择设备。

它通过下图所示的文件生成一份覆盖率报告,但是要执行此操作,您需要在项目方案(Xcode)上启用收集覆盖率数据

脚本编写

在构建过程中,可以分三个阶段在Buddybuild上运行自定义脚本。

  • 在克隆您的仓库之后。
  • 在开始建造之前。
  • 构建完成后。

要在克隆过程完成后运行自定义脚本,您需要在回购根目录中创建一个文件,并将其命名为buddybuild_postclone.sh

我们在这个项目上使用swiftlint,这是一个用于实施Swift样式和约定的工具。 因此,如果开发人员未遵循某个特定规则以创建自定义后期克隆脚本,那么我们想破坏构建。

您可以为每个分支创建不同的组。 例如,带有开发人员的alpha组和带有master的beta组。

徽章

Buddybuild和Codecov具有可以添加到自述文件中的徽章,以便开发人员可以直观地查看其状态。

要添加它们并创建一个很酷的自述文件,您可以转到设置,查找徽章并复制并粘贴标记代码。 就像这样:

  [![codecov](https://codecov.io/gl/xxxxxxxx/ios/branch/developer/graph/badge.svg?token=xxxxxxxx)](https://codecov.io/gl/xxxxxxxxxx/ios) 
  [![BuddyBuild](https://dashboard.buddybuild.com/api/statusImage?appID=xxxxxxxx&branch=developer&build=latest)](https://dashboard.buddybuild.com/apps/xxxxxxxxxxx/build/latest?branch=开发人员) 

如果您有任何问题,请在评论中让我知道。 再见!