Tag: 持续集成

使用Fastlane和Travis CI建立发行自动化

曾经有种感觉,就像您花费大量的办公时间来构建测试仪一样。 您正在构建版本,而不是对它们报告的错误进行修复。 好吧,如果您这样做了,那么您很幸运。 我们将讨论如何使用iOS开发人员可以使用的两个最简单的工具解决该问题。 快车道 特拉维斯CI 在将Swift集成到项目中(用Objective-C编写)之前,我们的构建时间非常短。 但是随着我们开始越来越多地在Swift中编写代码,这种情况发生了变化。 创建存档只需要3到5分钟的时间,而花费了15到20分钟的时间。 我们尝试了Apple建议的所有优化技术,但令我们沮丧的是,仅几分钟就对我们有所帮助。 如果您要花一些时间来上传构建版本,则很容易花费我们30-40分钟。 因此很显然,我们必须解决此问题,因为它会占用开发人员的时间及其生产力。 所以我们开始吧 如果您想直接跳到本教程,请向下滚动。 对于好奇的人,这里有一些关于我为什么选择Fastlane和Travis的见解。 快车道: 该工具使您可以非常轻松地自动化构建过程。 您的所有进程都位于这些很小的“通道”中,这些通道是可读的,因此,即使是新手,也可以通过查看代码确切地知道发生了什么。 而且,fastlane提供的输出非常有见地并且易于阅读。 管理代码签名:O !!! Fastlane提供与Fabric,HockeyApp,Testflight等第三方应用程序的完美集成。我们使用Fabric从测试人员下载构建的位置上传构建。 由于我想避免使用Fabric编写集成代码,因此Fastlane对我来说是一个显而易见的选择。 它拥有一个了不起的开发人员社区,您可以找到最常见问题的解决方案。 特拉维斯CI: 我不得不使用CI工具来分发我的构建,因此我选择在Jenkins和Travis之间进行一次小型调查。 以下是Travis与Jenkins相比的一些优势: Travis集成了GitHUB Web挂钩! 它还为您提供了一些漂亮的功能,例如在拉取请求中显示构建状态,队列管理,仅在最新提交时运行作业等。 您在Jenkins上确实有GitHUB插件,但是这一次您需要花费时间来集成它。 特拉维斯不需要任何设置。 我只需要创建一个帐户就可以了。 Travis是基于云的解决方案,因此您无需像Jenkins那样依赖于系统。 无论如何,足够了……。 让我们继续前进!!! 该工具将使我们的生成生成过程自动化。 我们将使用fastlane的两个工具: 匹配—管理不同分发方案的证书和配置文件 健身房—创建iPA 在系统上安装fastlane brew cask install fastlane 转到您的项目文件夹并运行 fastlane init 这将在项目目录中创建一个名为fastlane的文件夹,其中包含要在其中写入“ 泳道”的fastfile 。 通道遵循非常简单的结构: 车道:build do 选项 […]

使用Google Cloud Build的Vapor 3的简单CD流水线— git push→Docker容器→GKE中可用的服务

我有一个用Swift 4.1编写的Vapor 3项目,我想创建一个简单的CD管道,以便在每次git push送到分支时(或当有新标签时),都将在Google Kubernetes Engine中构建并部署一个容器,其API可从http://[INGRESS_IP]/projectname/获得,GKE中已配置了一个群集,该群集已配置Istio 1.0作为服务网格和定义的路由。 Vapor 3 Web框架 您可以在https://vapor.codes/上查看有关Vapor 3的更多信息,以及在https://docs.vapor.codes/3.0/上提供的文档。 这里特别令人感兴趣的是Swift 4.1与高性能Apple NIO非阻塞框架的结合。 如果要利用并行计算,多核体系结构和事件驱动的设计模式,则可能希望为项目采用非阻塞体系结构。 Vapor 3还带有一个异步库。 您可以使用的越多,并行化就越多。 云构建 Google Cloud Build是启用CD管道的简单工具; 在触发器方面,它支持推送到git分支和标签(与Google自己的代码仓库,GitHub和Bitbucket的Cloud Source Repository集成)。 已经有很多可用的云构建器可以作为单个步骤添加到管道中( 例如 ,docker,mvn,go,kubectl等)。 创建Dockerfile 配置Kubernetes部署和服务 配置Istio网关和虚拟服务 在cloudbuild.yaml配置管道 在Google Cloud Build中定义构建触发器( 例如,推送,标记) 1.创建Dockerfile 我使用了两个阶段的多阶段Dockerfile: 在Swift 4.1容器映像上构建Vapor 3服务 编译后的文件将复制到干净的生产映像中,从而生成一个小容器。 此示例使用ubuntu:16.04但有些人也使用alpine,显然有一些好处。 我没有尝试过alpine版本,如果它对您有用,请分享您的配置文件和/或评论 #Builder图像-构建代码 #================================================== ============== 来自swift:4.1作为构建者 运行apt-get -qq更新&& rm -r / var […]

编译速度提高60%:强制Xcode在Bitrise上使用缓存!

让我们迈出新一步,使Xcode的构建速度提高60%! 🏎 Xcode在派生数据文件夹(〜/ Library / Developer / Xcode / DerivedData)中存储和使用所有与构建相关的缓存文件和杂项数据,除非您运行导出命令。 但是缓存此路径并不是我们唯一要做的事情,因为Xcode缓存取决于项目结构及其所有属性,例如文件修改时间,内容等。 当您在Bitrise上克隆存储库以进行构建时,所有文件的修改时间都将设置为当前时间(git clone的时间),因此,即使大多数文件都已被修改 ,所有新构建的所有文件都将被视为已更改 。内容在构建之间完全没有变化。 为了避免更改文件修改时间,我们创建了一个名为“ 递归缓存缓存” 的新步骤 。 它有2个输入: 目录的路径(默认情况下:“ $ BITRISE_SOURCE_DIR”) 时间(默认为:“ 2017–09–01T15:00:00 + 00:00”)输入字段 此步骤将在给定目录下设置所有文件修改时间,因此在您随后开始的构建中,文件的修改时间将相同。 如果要使用适当的Xcode缓存,则必须设置两个步骤: 递归缓存缓存步骤-保留两次构建之间的项目文件修改时间。 这应该在您的Xcode单元测试步骤之前进行 Cache:Pull,Cache:Push —缓存派生的数据路径(将以下路径同时放入Cache:Push步骤的缓存路径,并忽略路径输入:〜/ Library / Developer / Xcode / DerivedData)。 您如何确认缓存是否按预期工作? 缓存之前,日志如下所示: 如果缓存正在工作,它将是这样的: === BUILD TARGET ios-simple-objc OF PROJECT ios-simple-objc WITH CONFIGURATION Debug === Check […]

将GitLab CI支持添加到iOS项目

我最近发表了一篇文章,详细介绍了几个持续集成系统以及我最终决定使用的系统:GitLab CI。 今天,我将我的另一个项目转移到了新服务中,我认为我将逐个演示如何使用GitLab CI构建和部署该项目。 关于该项目 有问题的项目是iOS的Scrawl Notes。 这是一个相对简单的应用程序,具有相对简单的要求。 它具有单个依赖项¹,由Carthage管理。 有两个测试目标(UI和单元测试)²,每当我推送到GitLab服务器时,我都希望同时运行它们。 最后,我通过Apple的TestFlight将此应用程序部署到Beta测试人员,因此当我推送到master分支时,我想自动将构建版本上传到那里。 快车道 Fastlane使在其他项目上进行所有这些设置变得更加容易,因此我将在这里再次使用它。 Scrawl Notes尚未使用Fastlane,因此将其添加为第一步。 $ fastlane setup 在设置过程中,Fastlane要求我提供我的Apple ID。 我有一个单独的Apple开发者帐户,仅用于我的持续集成系统。 这主要是因为,如果它完全变成了麻烦,至少它仅限于我的工作,而不是我的雇主或我们的任何客户的工作。 安装完成后,Fastlane为我创建了几个文件: $ git status On branch 1.2-release Changes to be committed: (use “git reset HEAD …” to unstage) new file: fastlane/Appfile new file: fastlane/Deliverfile new file: fastlane/Fastfile … 我在这里关心的主要是Fastfile ,它描述了我希望Fastlane运行的所有任务。 默认生成的文件中包含大量内容,我现在不想要所有这些。 这是我得到的: min_fastlane_version(“2.73.0”) […]

与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)。 […]

与fastlane和CircleCI的持续集成和交付

我们在Sixt希望分享我们为iOS应用程序进行持续集成和交付的方法。 在过去的一年中,改变我们制作CI和CD的方式对于我们的开发过程至关重要。 首先,让我们从我们的应用程序和团队的一些历史开始,以及如何影响我们对CI提供商的决定。 Sixt应用程序的第一版于2008年发布,我们的团队只有一名iOS开发人员。 那时,CI是没有必要的,并且所有操作都是手工完成的。 在将团队增加到3名成员之后,我们决定从CI开始使用Jenkins。 那时,这是合乎逻辑的决定。 Jenkins是免费的,我们可以将其托管在我们自己的硬件上,一次运行一个构建就可以了。 在2016年,我们决定迁移到TeamCity,并为我们的CI使用两个构建代理。 如今,我们的iOS团队由15位开发人员组成,他们构建了三个公共应用程序Sixt,DriveNow和MyDriver,以及多个内部应用程序。 随着最近几年的快速增长,出现了对新CI服务提供商的需求。 在此博客文章中,我们想分享我们当前的CI / CD管道。 CircleCi 从一开始就很明显,我们希望迁移到基于云的CI提供程序,因为我们自己的硬件的托管和维护花费了开发人员过多的时间。 对我们来说,两个最重要的指标是启动时间和并发性。 在比较了几个提供商之后,我们决定选择CircleCI,因为他们似乎非常满足我们的需求并且看起来已经足够成熟。 单击此链接开始使用CircleCI。 CI管道 现在到我们当前管道的实际外观有趣的部分。 我们正在使用fastlane运行所有脚本,CircleCI只是根据触发它的分支执行不同的通道。 以下是分支和通道如何连接的一般概述: 除了运行上述构建计划外,我们还将在每晚构建中运行整个测试套件。 这包括我们的单元以及UI测试。 在接下来的段落中,我们将完成项目的初始设置和代码签名,创建单个通道并在CirleCI上运行所有程序。 苹果开发者门户 首先,我们需要在门户中创建我们的应用程序标识符。 转到此页面并填写必要的信息。 每个构建配置都需要一个应用程序标识符。 对于此帖子,我们的基本捆绑包标识符是com.name.app,因此我们必须创建以下应用程序标识符: com.name.app com.name.app-dev com.name.app-alpha dev和alpha应用程序标识符是在我们的企业帐户中创建的。 允许在任何设备上部署。 快车道 如上所述,我们将使用fastlane运行脚本。 一个好的做法是使用Gemfile锁定依赖项。 在项目的根目录中创建一个Gemfile,并将fastlane添加为依赖项。 接下来,您将需要根据配置更改包标识符。 转到您的“应用程序目标”->“构建设置”,然后搜索“捆绑标识符”。 它看起来应该类似于: 配置代码签名的最后一步是更改签名设置。 转到常规标签,禁用“自动管理唱歌”,然后为每种配置选择正确的配置文件。 您应该在下拉列表中看到一个符合条件的配置文件。 我们的最终结果如下所示: 测试车道 下一步是创建用于运行我们的不同测试套件的通道。 我们有一条用于单元测试,UI测试的通道,并且可以运行所有通道。 记住要替换您的工作区和方案。 之后,进入项目设置并将用户部署密钥添加到项目非常重要。 这允许快速通道匹配来克隆我们的证书存储库。 再次在这里,我们建议您使用bot github帐户添加用户ssh密钥。 […]

在Bitrise上为Cordova和Ionic项目引入自动预配置

现在,可以在 Bitrise 上分离Cordova和Ionic项目的准备阶段和构建阶段 ,因此您也可以对这些项目类型使用iOS Auto Provision步骤。 -! 我们最近发布了iOS自动配置步骤,该步骤可管理Xcode项目的iOS配置配置文件。 该步骤使iOS的代码签名更加容易:您只需上传iOS开发和发行证书,该步骤将处理Provisioning Profiles。 该步骤分析iOS Xcode项目(或工作区),以确定签署该项目需要哪些Provisioning Profiles。 Cordova和Ionic的构建步骤(Cordova存档和Ionic存档)使用Cordova和Ionic CLI生成本机项目(通过调用platform rm和platform add命令)并进行构建(通过调用build命令)。 与在工作流中运行Cordova archive和Ionic archive步骤之前一样,本机iOS Xcode项目不存在,因此自动配置功能不适用于这些项目类型。 为了让您的生活更轻松,我们进行了一些更改以使其正常运行: 1.分开的Cordova / Ionic项目的准备和构建阶段 Ionic和Cordova存档步骤都有输入: Should remove platforms as prepare step? ,它控制是否应在构建阶段之前删除并重新添加本机平台。 通过将此输入设置为false ,该步骤将不会触摸生成的本机项目。 2.为Cordova / Ionic项目的准备阶段创建了新步骤 我们在构建步骤中关闭了平台删除功能,但是我们还必须注意准备过程。 从现在开始,您可以使用: 和 脚步。 新的准备步骤可以通过调用platform rm和platform add命令从您的Cordova和Ionic项目生成本机项目。 3.更新了 iOS Auto Provision 步骤 最新步骤版本(1.1.2)导出 项目的开发团队 已安装的代码签名标识的名称 已安装的配置文件 这些输出可用于提供“ […]

适用于iOS应用程序的Bitrise Fastlane集成

有关如何将fastlane(iOS和Android的CD工具)集成到Bitrise中以及如何在 Bitrise 上运行相同命令的 逐步指南 。 Moses Kim的来宾帖子。 原始帖子出现在 Shakuro博客上 。 本文基于对移动开发人员Sergey Laschuk和Ruslan Krohalev的采访。 摩西是Shakuro数字产品代理商的作家。 他喜欢研究技术,体验设计和武术。 在自动化测试以及构建Web和移动应用程序的部署方面,有几种完善的持续集成服务。 然而,Bitrise在2017年获得了广泛的宣传,并拥有在2018年获得更多关注的所有好机会。 什么是Bitrise Bitrise是一个主要致力于移动开发的持续集成平台。 持续集成(CI)是在特定的时间表上将开发人员构建副本合并到共享主线的一种普遍接受的做法。 换句话说,这是一个用于版本控制和复制部署的工作流,而不会失去对开发过程的跟踪。 Bitrise允许创建包含构建步骤的多个工作流程。 一个应用程序可以为其定义多个工作流程,还可以使用webhook来指定为哪个触发器(webhook)选择了哪个工作流程。 映射到工作流程的触发器使用预定义的工作流程启动构建。 对构建步骤进行编程,以执行由命令行脚本实现的各种功能。 记录所有虚拟机构建步骤,以保留工作流每一步的信息。 我们与Bitrise合作的项目 Bitrise允许Jira集成,这对我们来说是个不错的选择,因为要实现的所有功能,时间跟踪和估算都是由我们公司的Jira运行的。 构建自动化 到目前为止,我们已经在两个主要的移动开发项目上使用了Bitrise,其中一个是已经在App Store上运行的iOS应用程序。 凭借每天生成的新版本,Bitrise可以自动将主版本更改货件自动交付给App Store测试。 工作流还配置为仅在实施更改后才交付新的版本。 因此,产品负责人仅收到有关已发货的重要产品的信息。 测试自动化 新功能会自动进行测试,如果发现错误,则不会提供任何构建。 最新的Bitrise功能之一允许在设备模拟器上运行功能用户测试。 如果这些单元测试中的任何一个失败,则通知将直接发送给开发人员。 对于我们的一个iOS应用,每天都会从项目GitHub存储库上的提交收集所有消息。 在本周或冲刺结束时,或在具有里程碑意义的情况下,产品负责人(客户)提出了对修补程序的描述以及添加到内部版本的新功能。 提交随附的文件中列出了所有功能和修复。 这些描述的组合由Bitrise自动化。 总而言之,每次上传到TestFlight最多需要1个小时。 但是,由于它是由Bitrise虚拟机完成的,因此对我们来说不算什么。 什么是快车道 Fastlane是适用于iOS和Android的持续交付工具。 Fastlane是用红宝石编写的工具,可以通过红宝石宝石安装。 与Bitrise一样,Fastlane也有构建步骤,称为“动作”。 每个动作都是必须执行才能获得某种结果的任务。 可以将所有Fastlane动作收集到称为Lanes的单个实体中。 泳道就像Bitrise中的工作流。 当在Fastlane中运行通道时,如果任何一个操作执行不正确,则会执行该通道中的每个操作,并且构建失败。 通道在称为Fastlife的文件中定义。 在所有类似方面,Bitrise和Fastlane并不冲突且彼此重复,但是正如我们发现的那样,Fastlane可以大大补充Bitrise在移动开发项目中的参与。 […]

使用CircleCI测试和部署iOS应用

在Atomic启动新的新项目时,我们总是问自己有关测试和部署工具的问题。 CircleCI在移动和Web应用程序方面都非常幸运,因此当我发现CircleCI有适用于iOS的解决方案时,我很高兴能够利用它。 在这篇文章中,我将回顾如何在您的iOS应用程序中使用CircleCI,并说明如何处理CI和轻松部署道路上的一些障碍。 那么,CircleCI是什么? 简而言之,它是用于持续集成和部署的软件即服务平台。 我使用CircleCI的目标有两个: 持续集成测试,而无需自己维护服务器 使用TestFlight为我们的内部测试人员轻松部署 我跟随这篇出色的博客文章解释了CircleCI的启动和运行过程,并强烈建议有兴趣尝试CircleCI的iOS开发人员使用它。 接下来是关于我在CircleCI上部署新应用程序时的进度的分步日志。 1.创建一个帐户 登录到CircleCI并注册。 我们使用了最基本的OS X层服务器,每月费用为40美元。 您可以在此处找到完整的定价信息。 登录并将OS X存储库添加到CircleCI帐户。 他们与GitHub完全无缝集成。 2.分享您的Xcode方案 在Xcode中,确保您的方案是共享的,然后提交更改: 选择“产品>方案>管理方案”。 选择要共享的方案的“共享”选项,然后单击“关闭”。 推零钱。 对于大多数应用程序,您可以只共享您的主要项目方案。 如果仅共享一种方案,CircleCI将自动选择它。 3.创建并上传代码签名证书 CircleCI要求您上载配置文件和代码签名证书。 安装Fastlane工具套件可简化此步骤,并避免麻烦使用Xcode。 要创建签名证书,请运行: $ mkdir证书 $ cert –output_path证书 cert将创建三个文件,包括您需要上传的.P12文件。 同样,请参阅我上面链接的博客文章(我的指示直接来自于此)。 在这一点上,我遇到了第一个问题: 密码(对于foo@bar.com):*********** [09:05:29]:发送崩溃/成功信息。 有关更多信息:https://github.com/fastlane/enhancer [09:05:29]:未发送个人/敏感数据。 仅共享以下内容: [09:05:29]:{:cert => 1} [09:05:29]:证书 [09:05:29]:此信息用于修复失败的工具并改进最常用的工具。 [09:05:29]:您可以通过设置环境变量FASTLANE_OPT_OUT_USAGE = 1来禁用此功能 /Users/foobar/.rvm/gems/ruby-2.2.4/gems/spaceship-0.27.2/lib/spaceship/two_step_client.rb:39:handle_two_step中的[:]太空船目前不支持该推基于2步验证,请同时转换为基于SMS的2因子验证(RuntimeError) 这里发生的是Fastlane的Spaceship工具不支持Apple的基于推式的两步验证过程,因此当我运行证书时,它失败了,我在Macbook Pro上遇到了两步验证挑战。 原来这很烦人-错误消息建议切换到基于SMS的2因子身份验证,但我不知道如何使用AppleID进行此操作。 我采取了这样的方法暂时停用两步验证: […]

使用无构建测试,xctestrun和Fastlane加速iOS CI

PS:这篇文章最初发表在我的个人博客上; XCBlog 在这里 在WWDC 2016上,有一个关于“高级测试和持续集成”的精彩演讲,其中提到了XCTest Framework,Xcode-Sever和xcodebuild命令行工具中的许多新功能。 我们可以使用这些功能来加快iOS持续集成过程。 当前的iOS CI限制 在Xcode 8之前,我们必须在CI上运行单元测试和UI测试之前构建,编译和应用程序,这是正在运行的任务的重复。 分布式测试非常耗时,而且我们已经在每台机器上构建和编译源代码。 实际上,在CI Server上进行构建和编译需要花费大量的构建时间。 Xcode 8和xcodebuild功能 Xcode 8版本在“ xcodebuild”中购买了几个新功能,可以为iOS开发和测试过程增加很多价值。 “ xcodebuild”是用于从命令行构建,运行和执行我们的应用程序的命令行工具。 在Xcode服务器中使用。 Xcode 8现在在xcodebuild命令行工具中进行了一些改进。 测试构建 xcodebuild现在具有“ build-for-testing”选项,它像往常一样采用工作区方案和目标,但是最重要的是它将创建“ XCTESTRUN”文件。 我们只需要执行“测试构建”操作 $ xcodebuild -workspace -scheme -sdk iphonesimulator -destination’platform = iOS Simulator,name = ,OS = 10.2’构建测试 这应该构建用于测试的应用程序,并在DerivedData中创建xctestrun文件。 无需构建即可测试 xcodebuid还具有另一个名为“ test-without-building”的选项,在这里我们不需要提供工作区,而是指定XCTESTRUN文件,该文件将注入该文件并运行所有测试。 此功能对于分布式测试非常有用,因为我们可以在一台计算机上创建XCTESTRUN文件并分发到其他特定于测试的计算机。 为了使用它,我们可以在不构建的情况下将此选项指定为ru测试 $ xcodebuild -workspace -scheme -sdk iphonesimulator […]