IOS使用Jenkins进行持续集成

本文主要讲述在开发过程中,提高工作效率而进行的IOS-Jenkins的持续集成。

背景

平时我们开发完成IOS项目,需要打包给测试人员进行测试。其中的过程需要重复进行:修改配置项--编译---连接设备--运行打包--debug进设备中--然后交给等待的测试人员。现有成熟的持续集成Jenkins解决方案,并且该方案也提供了Xcode插件的支持,可以讲上述过程封装成一键解决方案。

我实现的是jenkins执行IOS的job,build工程,签名打ipa包,上传到FTP服务器,放到tomcat下,提供http下载安装app。

过程

1.下载安装jenkins

官网地址:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins#InstallingJenkins-Unix%2FLinuxInstallation

下载之后,是个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.

IOS使用Jenkins进行持续集成


4.源码管理

如果使用svn,选择subversion,直接指向地址即可;如果没有使用svn,选择none,则需要先运行下job,这样jenkins的工作目录就创建了一个结果failed的job,目录为.jenkins/jobs/你的job名字/。这时候,job下的目录还有builds,workspace等目录文件,我们需要的就是往workspace中放入我们的代码工程(这是官方的解决方案)。

目录结构见下图。

IOS使用Jenkins进行持续集成

这样workspace中就有了代码。

5.构建xcode项目

在增加构建步骤下拉中选择xcode。

IOS使用Jenkins进行持续集成

如上图,简单配置参数,执行项目的target,Configuration为Debug(看情况选择Release),下面还有个Pack application and build .ipa选项,这个我没选。

下面还有个Code signing和钥匙链的选项,可以不填,会自动找默认的(项目中配置的吧,可以在运行时的console中看到执行的日志,输出中会有每一步做什么了)。

在下面还有个xcode的高级参数配置,如图:

IOS使用Jenkins进行持续集成

scheme配置,以及需要build运行的SDK,这里选择iphoneos(这是要准备在真机上运行),还有构建的输出目录。

在这里说下模拟器的事项,这里不能配置成iphonesimulator,是因为没用,模拟器不能运行起来的,首先苹果unix命令能够启动模拟器,但是没有提供api来命令行方式往模拟器中安装ipa程序并运行(xcodebuild命令没有这个支持),上网找了个解决方案,发现是很久之前的了,4年前的,有个github的提供的插件,但是这个插件工程需要依赖iPhoneSimulatorRemoteClient.framework这个库,而现在的mac都搜不到这个库,所以不能运行,so命令行方式启动模拟器,并安装运行ipa的方式不行了,只能真机方式来了。

运行job,此时应该能出现当前的目录文件,那个ipa还出不来呢。

IOS使用Jenkins进行持续集成

现在到这,说明jenkins的这个IOS的job已经能够基本ok了。

6.接着我们来实现打包ipa文件

上面那个xcode配置 pack application and build ipa我没选,那个还没搞清楚,它的输出目录上下文变成jenkins了,而实际生成的ipa在xcode的安装目录的很隐蔽的目录,这个暂时没搞清呢。

而我是通过shell来做的,命令行方式。

选择增加构建步骤,点击shell的,然后出现个命令行的输入框,见图。

IOS使用Jenkins进行持续集成

按照图上的命令,选择sdk 打包app 指定输出目录文件,这样就能在build完成后出现上上图目录结构中的ipa文件,这个就是我们需要的安装程序了,经过签名的能再真机安装的。具体指定增加签名和描述的命令请看xrun的命令说明。

ok,我们已经完成了一大步了。

7.现在我们再来设置上传ftp的功能

mac电脑本身支持ftp服务的,并且发现了一个修改系统的便捷软件,lion tweaks,

IOS使用Jenkins进行持续集成

找到右侧的ftp,开启即可。

我们需要设置一下jenkins的系统配置--系统管理链接在根路径左侧,点开然后选择系统设置,下来找FTP的配置项,见图:

IOS使用Jenkins进行持续集成

我设置的自己电脑,所以localhost了。设置ftp的根路径root repository path,填入本机的用户名密码。

如图设置自己job的ftp服务,

IOS使用Jenkins进行持续集成

见图,设置需要上传的文件以及其相应的目录,现在ipa程序文件的上传,我们需要将build目录生成后的ipa文件上传到ftp服务器的一个目录,我们为了后续通过tomcat服务进行手机下载,所以上传到tomcat的目录下。

上传成功会在tomcat下有此目录结构,见图:

IOS使用Jenkins进行持续集成

这样我们上传文件到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,

<a href="itms-services://?action=download-manifest&url=http://192.168.200.124:8088/hello_jenkins2/publish/hello_jenkins.plist"><h2>Install</h2></a>

这个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">
<plist version="1.0">
<dict>
   <key>items</key>
   <array>
       <dict>
           <key>assets</key>
           <array>
               <dict>
                   <key>kind</key>
                   <string>software-package</string>
                   <key>url</key>
                   <string>http://192.168.200.124:8088/hello_jenkins2/static/build/Debug-iphoneos/HelloJenkins.ipa</string>
               </dict>
           </array>
           <key>metadata</key>
           <dict>
               <key>bundle-identifier</key>
               <string>com.hai.HelloJenkins</string>
               <key>bundle-version</key>
               <string>1.0</string>
               <key>kind</key>
               <string>software</string>
               <key>subtitle</key>
               <string>HelloJenkins</string>
               <key>title</key>
               <string>HelloJenkins</string>
           </dict>
       </dict>
   </array>
</dict>
</plist>

这样,浏览网页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一份就好了。



ps:

网上这方面的不多,自己花时间研究了下,奉献给大家了,还有一些疑点没弄清,后续再补充了。





IOS使用Jenkins进行持续集成

上一篇:【 Beginning iOS 7 Development《精通iOS7开发》】06 Multiview Applications


下一篇:晒订单赢图灵图书,《第一行代码——Android》福利活动劲爆来袭!