前言:一直想学习一下iOS的持续集成,最近开发企业内部app,打包测试发布更加频繁。所以有时间就研究了一下关于自动打包。
说起自动打包,首先想到的肯定是Jenkins,Jenkins可提供各种插件使用,支持不同平台,并且还是免费的。Jenkins + fastlane可实现构建、上传、测试、证书管理等一系列自动化。但是我在搭建好环境,安装好插件,配置好仓库ssl和开发证书,尝试了n次后,就是没有成功。。无奈对脚本语言的不熟悉。但是最近看到了关于Xcode server的东西,Xcode是支持持续集成的,之前的macOS Server是需要在Apple开发网站中下载的,并且还需要开发者账号的兑换码。在Xcode9更新后,macOS Server中的Xcode部分就直接集成到了Xcode中。但是有开发账号还是可以兑换一个macOS Server作为网站服务器😏。
言归正传,这是一篇技术文!首先看下使用Server&Bots在持续集成时可以做什么。
- 指定远程仓库,获取具体分支最新代码,可合并操作。
- 进行自动Archive,对代码进行静态分析,对代码进行单元测试,配置debug release。
- 设置打包签名 证书。
- 开始持续集成触发条件。(定时、在有新代码提交时、手动)
- 持续集成前执行的脚本(pre-integration script)、持续集成后执行的脚本(post-integration script)。
流程开始:
1、Xcode->Preferences->server&bots,选择当前Mac登录账户,打开。
2、创建bot
server的开关打开,代表server已经启动。然后开始创建bot。
首先解释一下bot:bot是一个构建工作的描述。一个bot对应一个独立工作空间,相对于jenkins,,bot可以类比jenkins的一个项目。持续集成的配置都在bot中设置。
开始创建bot
第一步打开需要持续集成的项目(前提需要这个项目需要已经上传到远程仓库)。
-
选择并配置服务。 Product->create Bots。server 下拉选择add new server,在列表中选择本机已启动的服务器,输入用当前mac登录的户名和密码。content as选择registered user。Xcode Server的账户配置可在Xcode-> Preferences->accounts中修改。
-
next 工程资源控制。next 选择工程需要持续集成的分支,我的测试工程中就只有一个分支,所以没有选择。就只有master了。
next 编译打包配置。archive expert选择使用plist文件自定义选项,plist文件在手动执行archive后,在导出的ipa文件夹中有ExportOptions.plist。选择plist文件,plist文件在企业证书打包时很重要,需要配置ipa下载路径、图片下载路径等。Configuration选择release,后面需要上传蒲公英。
- next 构建触发器配置。Integrate 选项中有periodically(周期性触发)、On commit(提交时触发)、Manually(手动触发),根据需要选择触发条件,这里选择手动触发。
-
next 证书签名配置。首先顶部options中有提供自动管理证书的选项,顶部也可切换手动添加证书到server。这里我选择的是手动添加打包需要的证书。
-
next 设置环境变量。这一步可设置预集成和后整合触发器所需的环境变量,执行的Run Script构建阶段所需的任何环境变量。环境变量设置可参考Xcode服务器环境变量参考。但是这里并没有用到。直接下一步🤷♀️。
配置bot触发器。可设置集成前后的脚本、邮件发送服务。这里点击左下角 + 添加一个post-integration script。右边可勾选触发器触发的动作。根据需要选择触发动作,这里只选择当构建成功才执行脚本(只勾选success)。
又到写脚本的时候了。这里只需要配置将打好的ipa,调用蒲公英提供api上传即可。首先打开蒲公英提供的蒲公英api文档。
获取到ukey和_api_key后,编写脚本,掉接口上传。脚本如下:
#!/bin/sh
curl -F "file=@$XCS_PRODUCT" \
-F "uKey=you uKey" \
-F "_api_key=you _api_key" \
https://qiniu-storage.pgyer.com/apiv1/app/upload
然后在确保代码commit之后,command+9 选择创建的bot,点击Integration开始,没错误就代表成功了。
蒲公英管理后台也能看到上传的应用,简单的持续集成就算完成了。有问题欢迎提问。