与Jenkins和Fastlane的iOS持续集成和交付(第1部分)

在这一部分中,我们将:

  • 了解什么是持续集成和持续交付以及为何如此重要
  • 在MacMini上设置Jenkins
  • 创建一个构建作业,从Github存储库中签出您的项目
  • 在构建服务器(以及本地开发计算机)上安装fastlane工具
  • 将fastlane集成到您的项目中并创建示例车道

请注意,我使用MacMini作为专用的构建服务器。 如果您使用的是MacBook,也可以阅读本文。 但是,在生产场景中,您可能要避免在执行自动构建的本地计算机上运行Jenkins。

1.什么是持续集成和持续交付?

持续集成(CI)是一种软件工程实践,通常将孤立的更改集成到较大的代码库中并立即对其进行测试。
持续集成的目标是验证这些更改的正确性,并尽快检测出集成错误。
为此,在每次集成后运行自动化测试是很普遍的。

连续交付(CD)是构建可以随时发布到生产环境的软件的功能。
持续交付的目标是确保软件代码始终处于可部署状态,无论它包括新功能还是仅包含错误修复。

2. CI和CD为什么重要?

每个与许多开发人员一起在开发团队中工作过的人都知道,将团队成员一直在努力的不同分支整合在一起可能会带来问题。 即使没有任何合并冲突,也总是有可能您在不注意或破坏构建的情况下弄乱了某些功能。
如果您使用的是持续集成,则更改将在集成之后立即进行测试,如果有任何问题,几乎会立即通知您。 频繁执行集成测试可确保大大降低交付损坏功能的风险。

频繁执行集成测试可确保大大降低交付损坏功能的风险。

除了对新功能和变更进行测试之外,能够随时发货也很重要。 想象一下,在最新的生产版本中存在一个严重的错误,您需要尽快发布一个错误修正版本。 如果您的交付过程花了几天时间才能准备好发布,这可能已经太迟了,有些用户已经卸载了您的应用程序。

3.为什么要在iOS项目中使用CI / CD?

无论您是定期将内部版本上传到测试服务(如TestFlight,Beta还是Hockey),还是要在较短的发布周期内提交应用程序更新(应该这样做),您都很可能会浪费大量时间重复以下步骤再三,一而再再而三:

  • 执行回归测试
  • 递增版本/内部版本号
  • 负责签名和配置
  • 上载到iTunes Connect
  • 更新AppStore截图和元数据

考虑一下如何可以做一些有生产力的事情。 好在,这是个好消息:您可以轻松地自动化此繁琐的过程。 🚀

4.在MacMini上设置Jenkins

1.重新安装Mac OS X(在本文撰写时为Sierra)

2.创建一个新的管理员用户帐户。 (詹金斯稍后会创建一个单独的用户帐户)

3.从www.jenkins.io下载最新的Mac OS安装程序并运行它。 或者,您可以使用自制软件安装Jenkins( brew install jenkins)

4.安装程序完成后,它将自动打开浏览器并转到http:// localhost:8080,这是您的jenkins的本地地址。 (如果您是Mac OS的全新安装,则需要先安装Java。只需打开终端,输入jave并选择More Info…或从此处下载最新版本的JDK)。

5.安装完成后,请返回浏览器并重新加载。 您需要使用initialAdminPassword解锁Jenkins。

请注意,您需要管理员权限才能访问secrets目录。 在终端中输入sudo su并使用vi打开initialAdminPassword。

6.解锁Jenkins后,选择“ 安装带有建议的插件的jenkins”,这些插件将涵盖最重要的插件(其中大部分我们甚至都不需要)

7. Jenkins现在将要求您为新的管理员用户提供凭据。 只需选择“ 暂时以admin身份继续”,然后转到admin>配置即可更改初始密码或创建新用户Jenkins> Manage Jenkins> Manager Users

8.现在,您的Jenkins已准备就绪。

9.安装向导会在系统上自动为Jenkins创建一个用户帐户。 转到系统偏好设置>用户和组,并注意没有用户名的用户是Jenkins帐户。 右键单击用户,然后在“ 高级设置”设置名称。 确保还设置密码。

10.选中允许用户管理此计算机 。 选择登录选项,然后选择詹金斯进行自动登录。

11.每当计算机重新启动时,您可能要启动Safari和Jenkins仪表板。 因此,再次在“ 系统偏好设置”>“用户和组”中,将Safari.app添加到Jenkins用户帐户的“登录”项中。 打开Safari,转到“偏好设置/常规”,然后选择Safari打开方式:新窗口新窗口打开方式:主页 ,并将主页设置为http:// localhost:8080。

5.创建一个构建作业以从Github签出您的项目

出于本文的目的,我创建了一个公共存储库。

您可以在这里找到它:https://github.com/christophherrmann/JenkinsFastlaneExample.git

如果您有私有存储库,则需要为您的詹金斯创建一个ssh密钥并将其添加到github或如果您使用的是HTTPS则提供您的凭据。 还可以考虑为您的詹金斯创建一个单独的github用户。 请注意,如果您使用其他版本控制软件,则可能需要执行其他步骤。

1.如果尚未从Mac App Store开始下载Xcode ,请立即下载。 我们将很快需要它。

2.创建一个新工作,然后选择Freestyle project

3.要从公共Github存储库中签出我们的项目,我们使用我们先前安装的Jenkins git插件。 在“ 源代码管理 ”部分中选中Git ,然后输入公共存储库的URL。

4.按下“保存”后,您将看到一个提示,告诉您git命令需要安装命令行开发人员工具 ,因此请确保已安装Xcode命令行开发人员工具

5.安装命令行工具后,选择“立即构建”以运行您的Jenkins作业。 如果一切正常,一旦完成,运行旁边应该有一个蓝点。 (如果您更喜欢绿色,请查看此插件)

/Users/Shared/Jenkins/Home/workspace/[your job name]下的Jenkins主目录中,您应该找到已签出的工作空间。

6.在构建服务器上安装fastlane

Fastlane是一组用Ruby编写的工具,可帮助您自动化持续部署过程。 Fastlane由Felix Krause创建,并已成为一个拥有良好社区的维护良好的开源项目。

1.您可以直接安装fastlane(就像我现在将使用RubyGems),也可以按照fastlane docs https://docs.fastlane.tools/getting-started/ios/setup/中的建议使用Gemfile使用的fastlane版本。

2.您可以简单地使用sudo gem install fastlane 。 但是,如果使用sudo安装fastlane,它将被安装在/usr/bin目录中,这可能是您不想触摸的Apple的系统ruby。 我建议安装Ruby Version Manager,它将每个Ruby版本安装在主文件夹中的隐藏文件夹中,这样就不会影响系统Ruby。 为此,请查看此出色的安装指南。

3.完成后,在终端中输入gem env ,现在可以看到除了系统ruby之外还有其他gem路径:

/Users/Shared/Jenkins/.rvm/gems/ruby-2.4.0/bin
/Users/Shared/Jenkins/.rvm/gems/ruby-2.4.0@global/bin

4.最后运行gem install fastlane ,它将安装fastlane工具和必要的依赖项。

5.我也建议在您的本地开发计算机上安装fastlane,因为您将尝试不同的配置,直到完成最终设置,这将污染您的git和构建历史。

7.将fastlane In集成到您的项目中

1.在项目的根文件夹中,运行fastlane init ,这将启动fastlane设置。 该设置会询问您的Apple ID和密码(将存储在您的钥匙串中),并提供在会员中心中创建App-ID和在iTunes Connect中创建App的功能。 将生成一个文件夹fastlane ,其中包含两个新文件,即AppfileFastfile 。 如果您不想输入任何凭据,则可以使用最低要求的配置手动添加Fastfile ,并将其放在项目文件夹中的文件夹fastlane中。

  fastlane_version“ 2.24.0” 
  default_platform:ios 
 平台:ios 
车道:示例
puts(“这是我的第一个🚀车道”)
结束
结束

2.将更改推送到存储库,然后转到Jenkins作业,并在“ 配置”下使用命令fastlane example添加“ 执行Shell”构建步骤

3.运行您的作业,现在在控制台输出中,您应该看到:

3a。 当使用RVM和RubyGems安装快速通道时,我遇到了Jenkins作业无法找到快速通道的问题。 问题的解决方案是安装Jenkins RVM插件并指定您的Ruby版本,如下所示:

太好了,您现在可以从Github检出存储库并运行fastlane!

在本教程的第二部分中,将创建并安排一个艰苦的构建工作,该工作将自动从Apple开发人员中心下载您的开发人员证书和配置文件,构建您的应用程序,增加版本号,并将生成的构建上传到TestFlight。

请继续关注第2部分!