Tag: Ansible

使用Fastlane和Ansible进行iOS连续部署-第1部分

注意:本文已发布在Moonpig Engineering官方博客上。 在这里阅读 在担任Photobox Group的前一职务时,我参与了为iOS部署设置持续集成服务器并为他们配置Ansible的iOS应用程序DevOps实践。 我们使用带有TeamCity的mac Mini服务器的自托管CI解决方案。 在这两部分的文章中,我们将看到我们如何结合Fastlane和Ansible实现iOS应用程序的持续交付。 持续交付(CD)和DevOps实践加快了向最终用户交付新功能的速度。 iOS应用程序开发的快节奏世界可能会受益于DevOps实践,从而可以快速,轻松地将应用程序发布到生产环境中。 在iOS世界中,发布很困难。 它涉及复杂的步骤,例如代码签名以及处理Apple开发和发行证书。 这可能是一个容易出错且耗时的过程。 通过从Xcode本地构建,测试和存档iOS应用程序来完成手动发布。 然后,已存档的.ipa文件需要上传到iTunes Connect。 理想情况下,我们希望使用持续集成(CI)来自动执行此过程,该过程无需人工干预即可将每次提交或合并推送到Apple Beta测试服务TestFlight的主分支。 在本文中,我们将说明如何使用构建自动化工具Fastlane实现持续部署。 Fastlane提供CD最常见的业务收益,但也为其他工程团队带来收益,包括: 消除针对DevOps的DIY,并专注于构建本地iOS功能。 每次合并后,新版本都会自动上载到iTunes Connect。 自动执行重复的升级或设置新CI服务器计算机的任务。 通过源代码管理所有基础结构。 开发人员计算机和CI服务器具有相同的配置。 挑战性 以前,发布我们的应用是一项使命。 部署是一天的马拉松比赛。 我们遵循了本地计算机上传统的,耗时的手动发布方式。 从Xcode构建,测试,存档和上传iOS应用程序非常耗时。 发布中最痛苦的部分涉及下载与分发证书关联的正确的配置文件。 如果我们在上载到iTunes Connect或在生产中的版本中发现问题,则重复此过程将更加痛苦。 为了简化发布过程,我们必须克服以下挑战: 自动化分析,构建,测试,存档并将iOS应用程序上传到iTunes Connect的过程 设置持续集成服务器以使用自动生成 在需要时自动执行重置CI服务器设置的过程(例如,当Xcode版本更改或任何Apple API更改时) 从代码或称为代码的基础架构驱动iOS CI基础架构 确保iOS开发人员计算机和CI服务器上的软件配置相同。 说不可以在我的机器上使用 我们结合使用Fastlane,TeamCity和Ansible工具解决了这些问题。 这些代码段仅供参考,让我们开始吧。 使用Fastlane构建自动化 诸如xcodebuild之类的Apple命令行开发人员工具是一种强大的方法,可用来编写任何我们想自动化的脚本。 但是,我们正在编写的命令可能非常冗长和繁琐。 Fastlane是Apple命令行工具的包装,使构建自动化更加容易。 有一系列Fastlane工具可用于自动执行各种iOS开发任务,例如,“扫描”用于运行测试,“健身房”用于构建应用程序,“飞行员”用于将应用程序上传到TestFlight。 自动化Swift版本检查 自动构建过程的第一步是确保使用正确的软件版本(例如Swift和Ruby)以干净的状态启动CI构建。 Fastlane提供一个before_all步骤,该步骤在所有其他通道之前运行。 您可以阅读有关高级Fastlane的更多信息,以配置此步骤。 […]

具有Fastlane和Ansible的iOS连续交付-第2部分

这是我在Photobox Group处理iOS应用程序持续部署的经验的第二部分。 在上一篇文章中,我们看到了我们如何使用Fastlane从持续集成服务器中连续部署iOS应用。 连续交付过程中最棘手的障碍之一是“在机器上工作”现象。 几乎每个工程师都至少遇到一次此问题。 我们还遇到了“在我的机器上工作”一文中提到的相同问题。 挑战性 在维护连续集成服务器的同时,我们遇到了以下挑战。 使用所有与iOS相关的软件手动设置CI服务器计算机需要花费几天的工程师。 在CI服务器上产生的结果在本地开发人员机器上无法再现。 我们的构建配置步骤与TeamCity持续集成服务器中的GUI配置紧密结合。 开发人员机器和CI服务器上的软件版本不同 我们失去了对CI服务器的信任,最终花费大量时间寻找问题的根本原因。 在此阶段,我们确实需要一些配置管理工具,该工具可让我们使用相同的配置来设置所有计算机,并应能够从头开始进行配置。 我们需要我们的iOS基础架构由代码(也称为基础架构)驱动。 我们正在为达尔文寻找类似Docker的产品。 有很多选择,例如Chef,Puppet等,但我们碰到了Ansible,因为它是用于基础结构自动化的简单但功能强大的工具,而无需了解其他任何语言(如Ruby)。 在这篇文章中,我们将看到如何使用Ansible来配置CI服务器。 使用Ansible设置iOS CI 以前,我们曾经使用交付iOS应用程序所需的所有软件来手动设置CI或持续集成服务器。 工程师必须手动下载并安装带有其他组件的Xcode,安装所需的自制软件包,设置RVM和rubygems。 它还涉及将构建服务器设置为TeamCity Build Agent。 要花费大约一两天的时间才能使构建机器处于工作状态。 这种方法既费时,又很难管理构建服务器上安装的软件版本。 我们使用Ansible设法使上述几乎所有内容自动化。 能够在需要时重置,重新构建iOS Continuous Integration Server环境非常重要。 Apple不断发布Xcode的新版本或Beta版本以及其他开发人员工具,因此我们应该能够快速设置和使用这些功能。 可编程基础结构或作为代码的基础结构是持续交付的关键,因此我们需要一个脚本来自动设置这些内容,而无需人工干预。 Ansible允许我们编写代码以管理部署以及基础架构的自动配置。 Ansible任务和剧本是简单的YAML文件,因此无需学习其他编程语言(如Ruby)来编写iOS基础结构脚本。 iOS持续集成服务器的配置涉及以下任务 预配置Xcode和Xcode命令行工具的安装 调配iOS开发所需的自制程序包 使用RVM设置红宝石环境 设置macOS默认值 为TeamCity服务器配置TeamCity代理 以上每个步骤都有Ansible任务,让我们更深入地研究这些任务 Ansible Xcode任务 包括Xcode在内的大多数Apple软件都是专有软件。 您需要Apple开发人员帐户才能下载安装这些软件。 设置Xcode的安装是一项重大挑战。 我们已决定下载特定Xcode版本的Xcode .xip文件,并将其托管在公司托管的SAMBA服务器上。 我们可以将Xcode .xip挂载到任何构建服务器机器上以安装Xcode。 然后,我们可以提供其他Xcode相关任务,例如接受协议,安装命令行工具,使用Ansible任务安装其他组件。 示例Ansible任务如下所示: — […]