Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

阿里云产品限时红包,最高 ¥1888 元,立即领取

本文说明如何在 Mac OSX 环境下,使用 Jenkins 对基于 CocoaPods 进行依赖管理的 iOS 项目做自动打包与持续集成,并将最终的安装包发布到 fir.im 上供下载。

前置说明

  1. 实现 iOS 项目自动打包,需要有 Mac OSX 环境。本文中使用的是一台普通的 Mac mini,并安装 Mac OSX 10.10 Yosemite。
  2. 本文中使用的自动打包脚本依赖于 xcodebuildxcrun,故需要确保安装 Xcode,并且系统中安装有 Xcode 的命令行工具。具体命令行如何打包,可以查看 iOS 命令行打包
  3. 本文中代码的版本控制工具使用 Git。Mac OSX 安装完成 Xcode 以后自带 Git,故不用另外安装。
  4. iOS 项目使用 CocoaPods 进行依赖管理,故 Mac OSX 需要安装 CocoaPods。具体可以查看 CocoaPods 使用
  5. 需要确保 Jenkins 服务器所在的机器上拥有对应的证书和 Profile 文件,才能够顺利打包。什么是证书和 Profile 文件,可以查看 iOS 证书和 Profile 文件
  6. 在 Mac OSX 下安装并配置好 Jenkins。Jenkins 的安装不在本文论述范围内,具体可以查看 Mac OSX 安装 Jenkins
  7. Jenkins 配置好相关插件,本文中使用到 Git pluginGit client pluginXcode integration 等插件。如何安装 Jenkins 插件,可以查看 Jenkins 插件安装
  8. 本文中代码所使用的文件目录结构如下。不同的文档结构会对 Jenkins 中嵌入的 Shell 脚本造成影响。即在实际项目源码位于根目录再下一级目录。
1
2
3
4
5
6
7
8
9
Art				// 项目目录
|--Art // 实际项目源码目录
|--Art
|--project.xcdoeproj
|--project.xcworkspace
|--Podfile
|--...
|--bin // 存放部分二进制文件的目录,实际中并未使用
|--doc // 本项目相关的文档目录

具体步骤

新建项目

使用具有配置权限的用户登录 Jenkins,选择”新建”,”构建一个自由风格的软件项目”,并确定。这里新建了一个名为 iOS-project-ci 的 job。

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

配置构建基本信息

填写相关 job 的信息,如名称、描述。

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

可以选择构建过程,并进行一些设置。这里选择”参数化构建过程”,添加一个 Text Parameter,并做相关设置。

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

高级项目选项,本文中没有做任何设置。

配置项目源码

源码管理中选择 Git,配置仓库地址,认证账户,需要构建的分支等。

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

根据项目需要构建触发器,本文中没有做任何设置,项目的构建由用户手动触发。

配置构建过程

配置 CocoaPods

由于本文中项目代码目录没有在根目录下,且使用 CocoaPods 进行依赖管理,故先增加一个 Shell 脚本的构建步骤。

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

其中 cd Art 是进入到 Podfile 文件所在目录,即实际项目源码目录。 pod install 用于更新实际项目的源码依赖。完整的 pod 更新可能会很好使,可以考虑 pod install --no-repo-update

配置 Xcode integration

新增 Xcode integration 构建过程

基础配置

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

  1. 本文的项目中使用 workspace, 所以 Target 可以不填。
  2. Configuration 是在 Xcode 中的配置,默认有 Debug 和 Release,这里的 InHouse 为我自己在项目中的配置,使用企业签名的对应用进行打包。
  3. 将应用打包成 .ipa 文件。
  4. 这里设置 .ipa 文件的名称。其中 $BUILD_NUMBER 为 Jenkins 提供的系统变量,为当前的构建版本号。
  5. 这里设置 构建过程输出目录。其中 $WORKSPACE 为 Jenkins 提供的系统变量,为构建根目录。

代码签名及密钥配置

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

本文中采用在 Xcode 项目中新增共享 scheme 的方式,在 scheme 内部对代码签名和 Profile 做了配置,同时 Jenkins 所在的 Mac OSX 中有对应的证书和 Profile,所以1,2中不需要做特殊配置,如果配置,将替换 scheme中的配置。

在打包的过程中,命令会由于系统的安全设置提醒输入密码,3中可以设置密钥所在路径及系统用户密码。

具体如何新增共享 scheme 及配置,可以查看iOS 配置 scheme 和 configuration

Xcode 高级构建配置

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

  1. 这里的 Art-Ci 就是我在 Xcode 项目中新建的 scheme。
  2. 本文中的项目包含有 workspace,这里设置对应路径,注意不需要带上 .xcworkspace 后缀。
  3. Xcode 项目所在目录
  4. Xcode 项目文件,这里需要带上 .xcodeproj 后缀。
  5. 设置构建输出目录。

发布到 fir.im

添加一个 Shell 构建步骤,输入如下命令:

fir p $WORKSPACE/build/art_$BUILD_NUMBER.ipa -c "$release_note"

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

这里发布到 fir.im,使用了其官方提供的 fir-cli 工具。 $WORKSPACE/build/art_$BUILD_NUMBER.ipa 获取到最终打包的 .ipa 文件路径, $release_note 为我们在”带参数构建”中添加的参数。 fir-cli 的使用,具体查看官方工具 fir-cli 使用说明

完成以上配置,应用并保存配置。

添加其他构建后步骤

可以在构建完成以后,配置邮件通知等操作以便及时将构建结果通知到相应的人员。

启动构建

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

Jenkins、Git、CocoaPods、Fir.im 实现 iOS 应用持续集成

设置参数,点击”开始构建”,构建过程便被触发。如果构建成功,最终 iOS 应用将被发布到 fir.im 上,并进行访问。例如,本文中的项目最终可以通过 http://fir.im/yiwai 来访问并下载安装。