Jenkins、iOS App 持续构建的极简之道

对于每天都要打包 App 给测试人员,这种重复而低效的工作,自然会被懒癌病患者所厌恶和抛弃。最近也在捣鼓着这一块,遇到一些坑,也搁置了好几天,目前终于完成了。可以一键发布,会从 Github 获取最新项目代码,编译成功后直接发布到 Fir 上。

以下是 Jenkins 自动化编译和发布 iOS App 遇到的一些坑和一些基本步骤,希望可以帮助大家。

Jenkins 的安装

在官网 jenkins.io 下载 war,之前我直接下载了 pkg 安装包,之后不小心创建了 Jenkins 用户,踩了很多坑。实在受不了后直接改用 war ,这样顺利地避免了各种奇怪的问题,通过命令来启动

1
nohup java -jar /Applications/Jenkins/jenkins.war --httpPort=8080

启动完后在浏览器输入 127.0.0.1:8080 便可以进去 Jenkins 页面

看到这个画面后,就可以进入持续发布的神奇之旅。

Jenkins 插件

开始神奇之旅之前,需要创建一个用户,然后在系统管理中的 Configure Global Security 里勾上这两项即可(因为在我自己本机所以安全操作这个没在意,其他的需要管理一下权限):

用一创建的用户登录后就可以进行安装插件等操作了,需要装几个将要用到的插件:

  • Git client plugin
  • SSH Credentials Plugin
  • Keychains and Provisioning Profiles Management

在管理插件里的可选插件直接搜索安装,fir 上传插件直接上它的官网下载上下载安装。

安装完后重启一下 Jenkins,在浏览器上输入

1
http://127.0.0.1:8080/restart

按回车即可重启

SSH 连接 Github

Credentials 里的 Jenkins 行的 (global) 项点击下拉添加一个 Credentials,选择如下项

  • Username :填写你 github 的用户名
  • Private Key:Enter directly 里直接将 ssh 的私钥 copy 过来即可
  • Passphrase:填写 ssh 创建时的密码

填完点击完成即可。

Keychains and Provisioning Profiles Management

安装完插件后在管理 Jenkins 页面上有这么个选项来管理 iOS 的证书

  • 首先上传 login.keychain,这个文件在 ~/library/keychains/ 这个目录下,上传成功后

    • Password:系统登录密码
    • Code Signing Identity:iOS 发布证书的名称,可以在系统的 keychain 找到证书后,显示简介后里面有个常用的名称即是
  • 上传 adhoc 证书

创建项目

前面准备完成后,这才真正开始进入持续化的神奇之旅,新建 –>> 选择自由化项目,之前的一些配置可以不管,不过后续可以在 Jenkins 官网 深入了解。

源码管理

选择 git:

  • Repository URL:项目 git 位置
  • Credentials:选择前面建立的 ssh 用户
  • Branch Specifier (blank for 'any'):项目的分支

构建环境

在构建环境里将 Keychains and Code Signing IdentitiesMobile Provisioning Profiles 勾上

如图选择相应的 login.keychain 和 adhoc 证书即可

构建步骤

选择 Execute shell,填写以下 shell,因为 mac 系统是 10.11.6,采用 Jenkins 的 Xcode 插件一直 build 不成功,所以建议使用原来那个 Xcode integration 而是直接使用 shell 构建。

1
2
3
4
5
6
7
8
if [ -d "${WORKSPACE}/builds" ]; then rm -rf ${WORKSPACE}/builds; fi;
mkdir ${WORKSPACE}/builds;
if [ -d "${WORKSPACE}/builds/${BUILD_NUMBER}" ]; then rm -rf
${WORKSPACE}/builds/${BUILD_NUMBER}; fi;
mkdir ${WORKSPACE}/builds/${BUILD_NUMBER};
xcodebuild clean
xcodebuild -workspace ${WORKSPACE}/xxxxxxxxxxxx.xcworkspace -scheme "xxxxxxxxxxxx" archive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/xxxxxxxxxxxx.xcarchive CODE_SIGN_IDENTITY="iPhone Distribution: xxxxxxxxxxxxxxxxx"
xcodebuild -exportArchive -exportFormat ipa -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/xxxxxxxxxxxx.xcarchive -exportPath ${WORKSPACE}/builds/${BUILD_NUMBER}/xxxxxxxxxxxx.ipa -exportProvisioningProfile "XC Ad Hoc: *"

实际中,将 xxxxxx 替换为项目的名称,具体的 xcodebuild 使用可以参考 官网 上的介绍,熟悉的话也可以通 man xcodebuild 命令来查看具体的内容。

构建后操作步骤

选择 Upload to fir.im,配置好 fir 的 token 即可

完成

保存项目完成基本的配置,可以立即构建测试效果,如果看到如下图,表示已经成功完成一次构建之旅。

其实 Jenkins 还有很多非常棒的使用,如定时任务等等,这有待继续探索。