与Jenkins和Fastlane的持续集成和持续交付

测试一直是大多数大中型项目的重要组成部分,因此,对我们的主分支进行的每次代码更改都必须触发测试套件的完全执行,这一点很重要,以确保我们所做的更改不会破坏其他任何代码测试用例。 这就是我们所说的持续集成(CI)。 这是为了验证代码更改的正确性并快速识别集成错误。

在收到CI的同意后,下一步是确保交付包含新功能和/或错误修复的新软件。 这就是我们所谓的持续交付。 由于CI已解决了测试套件的问题,因此我们在此处运行脚本以对证书进行签名(在Xcode / iOS上下文中),并使用第三方工具(如FastLane)执行存档,以触发可发送到用户电子邮件的可部署软件。立即进行测试。

詹金斯是什么?

詹金斯(Jenkins)为我们提供了无缝方式,以使用管道为几乎任何组合的代码语言和源代码存储库设置CI / CD环境。 它是一个开源自动化服务器 ,可用于自动化与构建,测试以及交付或部署软件有关的任务。 它也是帮助DevOps团队的必不可少的工具,由于我们在特定时期内管理的项目数量不断增加,以确保其高质量的交付成果, DevOps团队如今越来越受欢迎。 Jenkins的插件可与GithubBitBucket等第三方源控制器集成。

什么是Fastlane?

FastLane是用Ruby编写的CD工具,用于发布移动应用程序(iOS / Android),为您消除了繁琐的任务。 由于其针对iOS生态系统的较早开发,我们可以看到iOS提供了比Android更多的功能。

注意:如果您是Fastlance的新手,也可以查看我们的Fastlane教程

先决条件

为了完成本教程,我假设您已具备以下知识和工具:

  1. 有关构建iOS项目的一些基本知识。
  2. Swift中一些具有Quick&Nimble的单元测试知识。
  3. 一些虚拟主机知识。
  4. 使用本教程的Mac机器。
  5. 用于生成证书的开发者帐户。
  6. 忍耐

设置整个过程非常耗时且乏味。 通过大量的试验和错误,我可以将所有内容拼凑在一起,以创建本教程。 在撰写本文时,可能会有更新进入,内容可能已过时。 请比较出现的版本升级并进行相应处理。 不要犹豫,给我留言,这样我就可以相信您并更新本教程,以使其余人员受益! 谢谢☺

你会学到什么?

通过阅读本教程,您将学到很多有关CD和CI的知识,包括:

  1. 如何设置Jenkins 2.121.3(Java 8)
  2. 如何设置Fastlane
  3. 如何使用Jenkins + Github管理您的CI
  4. 如何使用Jenkins + Github + Fastlane管理CD
  5. 如何为您的项目设置CI / CD
  6. 如何使用Webhook Relay将Github与Jenkins挂钩。

设置詹金斯

首先,从要托管CI / CD的计算机上下载Jenkins 。 我个人更喜欢长期支持(LTS)作为入门。 由于它是完全用Java编写的,因此以后将需要适当版本的Java来启动.war文件。

下载完成后,请解压缩软件包并安装其内容。 它将自动将Jenkins安装到Applications文件夹中。 由于Jenkins 2.121.3是用Java 8编写的,因此我们需要相同的版本来执行war文件。 通过运行以下命令快速检查当前路径中的版本:

  Java版本 

对我来说,我有:

  Java版本“ 9.0.1” 
  Java(TM)SE运行时环境(内部版本9.0.1 + 11) 
  Java HotSpot(TM)64位服务器VM(内部版本9.0.1 + 11,混合模式) 

因此,我将需要更改为受支持的版本。 您可以在这里下载。

安装Java 8 JDK ,运行:

  / usr / libexec / java_home -V 

请确保您具有与以下类似的输出:

 匹配的Java虚拟机(2): 
  9.0.1,x86_64:“ Java SE 9.0.1” /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home 
  1.8.0_181,x86_64:“ Java SE 8” /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home 
  /图书馆/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home 

现在让我们将默认的Java版本设置为1.8以运行我们的jenkins:

 导出JAVA_HOME =`/ usr / libexec / java_home -v 1.8` 

运行詹金斯战争文件:

  java -jar jenkins.war 

中提琴! 现在,您的jenkins在localhost:8080上运行!

从第一个屏幕上可以看到,只需复制URL并在终端中运行vi /Users/[computername]/.jenkins/secrets/initialAdminPassword即可检索密码(或者您可以从控制台登录终端获取密码)。 按照向导进行操作:

  1. 安装建议的插件
  2. 创建一个用户管理员帐户
  3. 设置网址(本教程可以使用http://localhost:8080/

您应该与Jenkins仪表板打招呼,并准备开始为我们的项目创建CI / CD作业!

安装Jenkins插件(Github和Xcode)

要使Jenkins接收来自Github的通知并运行作业,需要在我们的Jenkins服务器中安装插件。

  • 转到您的插件管理器
  • 查找并安装GitHub插件
  • 安装完成后,转到“ 配置系统”并查找Github Server以添加Default Github Servers 。 由于我们将使用公共存储库,因此我们不必在此处添加凭据。
  • 同时更新您的Xcode Builder设置,并确保您具有合适的插件。
  • 安装Xcode插件。

创建詹金斯工作

现在,回到我们的Jenkins主仪表板并创建2个新工作。

  1. TruthOrDare-CI(自由式项目)
  2. TruthOrDare-CD(自由式项目)

让我们首先转到“源代码管理”并启用Git,首先配置TruthOrDare-CI。 复制您的公共github repo url。看起来像https://github.com/[user]/[project].git

我们将在这里将分支指定符从*/master更改为*/develop

  1. 对于develop分支机构所做的每项更改,我们将运行CI
  2. 我们将对对master分支进行的所有CI更改运行CD

如果我们对开发分支进行了多次代码更改,则我们不想为每个代码更改生成一个构建。 大多数情况下,功能包含多个代码更改(错误修复除外)。 一旦所有这些代码更改都通过了CI,我们将把它们合并到master中,它将在其中运行CD并将构建推送到您声明的电子邮件中。

接下来,我们将打开GitHub钩子触发器以进行GITScm轮询 。 这是允许Jenkins响应webhook的主要开关,它可以在Webhook上标识更改了哪些存储库,然后运行作业。

配置您的Webhook

如前所述,我们现在将按照以下安装步骤来设置Webhook。

下载CLI后,请使用它:

 中继登录-k token-key-here -s token-secret-here 

然后开始将您的网络挂钩转发给詹金斯:

 中继转发-桶github-jenkins http: // localhost:8080 / github-webhook / 

看到以下消息后,这意味着您的Webhook中继成功!

  https://my.webhookrelay.com/v1/webhooks/6edf55c7-e774-46f8-a058-f4d9c527a6a7- > http:// localhost:8080 / github-webhook / 

正在启动webhook中继代理…

hoo! 您应该为此而轻拍一下! 将此网址粘贴到记事本或其他内容中,您将很快需要它。

现在,将此Webhook添加到Jenkins中

到目前为止,您应该已打开2个终端:

  1. 运行詹金斯
  2. 运行Webhook中继

下载Xcode项目并推送到Github

为简单起见,我将在此处提供一个名为Truth or Dare示例项目 。 我鼓励您自己创建一个新的公共存储库,并将此代码推送到您选择的存储库中,以密切关注本教程。 该项目与使用Carthage的 Quick&Nimble集成在一起,以运行单元测试,这是CI流程的一部分,以确保在完成合并之前始终通过测试套件。 因此,继续并将其推送到Github

在使用迦太基时,我们将需要在詹金斯中添加carthage update命令来构建詹金斯中所需的文件夹。 因此,继续将此命令添加为两个Jenkins作业中的另一个构建步骤。

请记住要在Apple Developer Portal设置自己的App ID 。 生成证书,以便我们的詹金斯工作能够成功建立。

在Github中使用Webhook

现在,获取您刚才生成的webhook中继URL,它看起来像https://my.webhookrelay.com/v1/webhooks/6edf55c7-e774-46f8-a058-f4d9c527a6a7 ,并将其粘贴到您的回购协议的webhook部分中。

而已! 代理正在运行并转发请求。

设置Fastlane

现在,通过运行以下命令来设置Fastlane

  sudo gem install fastlane -NV 

然后,转到TruthOrDare的项目文件夹并运行:

 快速通道初始化 

Fast您的Fastlane已初始化!🚀🚀🚀

现在我们的Fastlane已激活,现在该加快速度了! 让我们选择4 Manual Setup 。 之后,您应该已经生成:

  1. 应用文件
  2. 快速文件

在您喜欢的TextEditor中打开Fastfile并将此代码粘贴到:

ew,深呼吸

让我们回顾一下我们刚刚做的事情:

  1. 我们在计算机或本地主机上设置CI / CD Jenkins。
  2. 我们做了一个Webhook中继/转发到公共URL。
  3. 我们创建了Xcode项目并将其推到公共的Github存储库中。
  4. 我们使用公共URL设置了仓库的webhook。
  5. 我们在仓库中设置了fastlane。

准备? 准备好……开始!

恭喜你! 您已完成自动化过程的设置! 如果您在自动化运行时遇到一些问题,请不要失望,在下面添加评论,我们可以一起解决。 结果因机器而异,但是概念是这样!

因此,让我们从master分支签出到我们的develop分支,然后更改代码库。 将我们的真理数组替换为:

运行我们的CD

CI成功后,让我们运行CD ! 还记得我们正在观察CD的master分支吗? 来吧

  1. git checkout master
  2. git merge develop
  3. git push

由于我们的master分支仍然保留着仅有5个Truths&Dares的代码库,因此我们需要合并我们从developer所做的更改。 应用更改后, CD将开始运行并且中提琴! 您将通过电子邮件收到该版本!

如果您的设备未在Crashlytics中注册,则可能需要运行两次。 您可以通过单击Build Now构建来手动触发Build Now

概括

那么我们取得了什么成就?

  • 我们从理论上了解了CI / CD从代码提交到构建发布的工作原理
  • 我们学习了如何设置詹金斯
  • 我们学习了如何设置Webhook
  • 我们学习了如何设置Fastlane&Crashlytics
  • 我们学习了如何集成和自动化整个过程

我们所有人都应该得到我们的支持,一个完成本教程的写作,一个供您遵循这个漫长的过程来启动和运行CI / CD!

包起来

如果您对本教程有任何疑问,请在下面留下您的评论,并让我知道。

如果您希望我用更高级的CI / CD技术(例如缓存Carthage或与Pull Requests集成)编写后续教程,请随时给我留言!