转自:http://www.itnose.net/detail/6075531.html
本文主要讲述在开发过程中,提高工作效率而进行的 IOS-Jenkins 的持续集成。
背景
平时我们开发完成 IOS 项目,需要打包给测试人员进行测试。其中的过程需要重复进行:修改配置项 -- 编译 --- 连接设备 -- 运行打包--debug 进设备中 -- 然后交给等待的测试人员。现有成熟的持续集成 Jenkins 解决方案,并且该方案也提供了 Xcode 插件的支持,可以讲上述过程封装成一键解决方案。
我实现的是 jenkins 执行 IOS 的 job,build 工程,签名打 ipa 包,上传到 FTP 服务器,放到 tomcat 下,提供 http 下载安装 app。
过程
1.下载安装 jenkins
下载之后,是个 war 包(后台服务),是要求有 jdk 的。
然后直接点击 jenkins.war 即可运行,访问http://localhost:8080/即可
也可通过命令行运行 java -jar jenkins.war --httpPort=8888;http://localhost:8888/
也可以放到 tomcat 下面。
运行起来后,会在 user 下创建一个.jenkins 目录。
2.增加 Xcode 插件
在 jenkins 的系统管理中,找到管理插件,可选插件的 tab 下搜索 xcode,勾选安装,安装插件/升级处等待?jenkins 升级到最新版本了,xcode 插件更好安装(如果失败请下载最新的 jenkjins,或者多尝试几次)。
这样重启 jenkins 的话,就会在 job 的构建中下拉选择处看到 xcode 的支持选项。
3.新建 job
新建一个 free 的 job.
4.源码管理
如果使用 svn,选择 subversion,直接指向地址即可;如果没有使用 svn,选择 none,则需要先运行下 job,这样 jenkins 的工作目录就创建了一个结果 failed 的 job,目录为.jenkins/jobs/你的 job 名字/。这时候,job 下的目录还有 builds,workspace 等目录文件,我们需要的就是往 workspace 中放入我们的代码工程(这是官方的解决方案)。
目录结构见下图。
这样 workspace 中就有了代码。
5.构建 xcode 项目
在增加构建步骤下拉中选择 xcode。
如上图,简单配置参数,执行项目的 target,Configuration 为 Debug(看情况选择 Release),下面还有个 Pack application and build .ipa 选项,这个我没选。
下面还有个 Code signing 和钥匙链的选项,可以不填,会自动找默认的(项目中配置的吧,可以在运行时的 console 中看到执行的日志,输出中会有每一步做什么了)。
在下面还有个 xcode 的高级参数配置,如图:
scheme 配置,以及需要 build 运行的 SDK,这里选择 iphoneos(这是要准备在真机上运行),还有构建的输出目录。
在这里说下模拟器的事项,这里不能配置成 iphonesimulator,是因为没用,模拟器不能运行起来的,首先苹果 unix 命令能够启动模拟器,但是没有提供 api 来命令行方式往模拟器中安装 ipa 程序并运行(xcodebuild 命令没有这个支持),上网找了个解决方案,发现是很久之前的了,4 年前的,有个 github 的提供的插件,但是这个插件工程需要依赖 iPhoneSimulatorRemoteClient.framework 这个库,而现在的 mac 都搜不到这个库,所以不能运行,so 命令行方式启动模拟器,并安装运行 ipa 的方式不行了,只能真机方式来了。
运行 job,此时应该能出现当前的目录文件,那个 ipa 还出不来呢。
现在到这,说明 jenkins 的这个 IOS 的 job 已经能够基本 ok 了。
6.接着我们来实现打包 ipa 文件
上面那个 xcode 配置 pack application and build ipa 我没选,那个还没搞清楚,它的输出目录上下文变成 jenkins 了,而实际生成的 ipa 在 xcode 的安装目录的很隐蔽的目录,这个暂时没搞清呢。
而我是通过 shell 来做的,命令行方式。
选择增加构建步骤,点击 shell 的,然后出现个命令行的输入框,见图。
按照图上的命令,选择 sdk 打包 app 指定输出目录文件,这样就能在 build 完成后出现上上图目录结构中的 ipa 文件,这个就是我们需要的安装程序了,经过签名的能再真机安装的。具体指定增加签名和描述的命令请看 xrun 的命令说明。
ok,我们已经完成了一大步了。
7.现在我们再来设置上传 ftp 的功能
mac 电脑本身支持 ftp 服务的,并且发现了一个修改系统的便捷软件,lion tweaks,
找到右侧的 ftp,开启即可。
我们需要设置一下 jenkins 的系统配置 -- 系统管理链接在根路径左侧,点开然后选择系统设置,下来找 FTP 的配置项,见图:
我设置的自己电脑,所以 localhost 了。设置 ftp 的根路径 root repository path,填入本机的用户名密码。
如图设置自己 job 的 ftp 服务,
见图,设置需要上传的文件以及其相应的目录,现在 ipa 程序文件的上传,我们需要将 build 目录生成后的 ipa 文件上传到 ftp 服务器的一个目录,我们为了后续通过 tomcat 服务进行手机下载,所以上传到 tomcat 的目录下。
上传成功会在 tomcat 下有此目录结构,见图:
这样我们上传文件到 ftp 服务器的就实现了。
8.Tomcat 服务
然后我们需要设置 tomcat 服务,以方便手机可通过网页下载并安装我们的应用。
下载 tomcat,进入 tomcat 的 bin 目录,执行命令,
sh startup.sh
启动 tomcat。
新建一个简单的 web 项目,这个请简单看下 web 自己实现,然后放到 tomcat 的 webapps 下面,修改 tomcat 的访问端口 8088,与 jenkins8080 冲突,这样我们访问 tomcat 的时候,
就能访问到我们的项目,http://localhost:8088/hello_jenkins2/index.jsp。
9.下载支持文件
现在说明我们的 jenkins 的 job 的 ftp 其他文件上传是干嘛,ios_down.html 是提供一个网页,可以点击一个链接从而下载安装程序到手机。而相对的那个 hello_jenkins.plist 文件则是支持 ipa 文件下载到手机的文件。
ios_down 的链接协议指向这个 plist,
这个 hello_jenkins.plist 里面说明并指向 ipa
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
items
assets
kind
software-package
url
http://192.168.200.124:8088/hello_jenkins2/static/build/Debug-iphoneos/HelloJenkins.ipa
metadata
bundle-identifier
com.hai.HelloJenkins
bundle-version
1.0
kind
software
subtitle
HelloJenkins
title
HelloJenkins
这样,浏览网页 ios_down.html 的时候,点击上面的 install 标签,则指向 hello_jenkins.plist 文件,并解析再定位到 ipa 文件,手机同时提示下载安装 hello_jenkins 了,下载安装即可。
10.完成
手机访问
http://192.168.200.124:8088/hello_jenkins2/publish/ios_down.html
我的已经安装到手机了,就不发图了。
11.最后注意一些问题
注意路径问题,如果 job 的 ftp 文件上传路径,html 文件和 plist 文件的路径有一点不对,都会造成无法访问等下载不了问题。
还要注意安装程序的 base sdk 与真机的兼容性,否则安不上。
注意 ftp 的上传目录是基于我们系统设置的用户目录下的。
还有就是如果上传文件的目录没对上,jenkins 是不报错的,而输出日志提示 not found 文件,所以多看看 job 的日志。
还有就是有时候 plist 文件明明是对的但是就是显示无法访问,请试试 copy 一份别处的 plist 文件,在修改内容,我的曾经出现过,copy 一份就好了。