本文主要讲述在开发过程中,提高工作效率而进行的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.

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,

<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进行持续集成的更多相关文章

  1. 【iOS】Jenkins Gitlab持续集成打包平台搭建

    Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...

  2. 使用jenkins构建持续集成平台

    jenkins +   Maven + svn/git + tomcat 的持续集成平台 项目管理流程: 需求分析----原型设计----开发代码----提交测试-----内部测试-----确认上线( ...

  3. 用MSBuild和Jenkins搭建持续集成环境(2)

    http://www.infoq.com/cn/articles/MSBuild-2   作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意:  ...

  4. jenkins jmeter持续集成批处理jmx脚本

    这篇文章介绍jenkis jmeter的持续集成,利用jenkins定时任务去批处理执行jmeter的jmx脚本文件,并且生成测试报告 1:jmeter的安装这里我就不在赘述了,如有问题可参考我的jm ...

  5. RF+Jenkins构建持续集成

    引入RF是为了能够快速的开展自动化验收测试,Jenkins而一种持续集成工具,用于监控持续重复的工作,持续的软件版本发布/测试项目,而通过RF+Jenkins可以有利的对RF构建的接口项目进行持续集成 ...

  6. Jenkins+Git 持续集成

    持续集成是必要的! 希望达到的效果是:开发同事签入代码后,对应的站点可以自动实现更新.目前还只在在内部服务器上实现开发环境中的站点更新,不涉及到线上的发布. 目前使用Jenkins实现这样的持续集成. ...

  7. 使用Jenkins进行持续集成ionic3项目

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.  网上大多数是关于.net web网站以及 ...

  8. 使用jenkins实现持续集成

    一.jenkins 介绍 它是一个自动化的周期性的集成测试过程,从检出代码.编译构建.运行测试.结果记录.测试统计等都是自动完成的,无需人工干预: 它需要有专门的集成服务器来执行集成构建: 它需要有代 ...

  9. jenkins+github持续集成中的坑

    1.前言 刚开始开发自己的独立博客的时候,每次发布都要手动打包,上传服务器,杀tomcat进程,重启,来回这么重复性工作,很快就有点不耐烦了.如果能自动化的东西,就绝不要手动了,所以自己搭建了个持续集 ...

随机推荐

  1. 2014-10-4 NOIP模拟赛

    1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑▒[Ai*Bi],则 ...

  2. 如何在VMware workstation上创建Linux虚拟机

    由于需要使用Linux虚拟机部署Hadoop集群,故在win10系统上安装了VMware workstation 14,现将介绍如何在VMware workstation上创建Linux虚拟机.下面以 ...

  3. Maven项目编译版本的问题和Spring中没有导入核心包

    idea中maven项目的编译: 方案1:maven的settings.xml中指定全局默认编译版本 <profile> <id>jdk-1.8</id> < ...

  4. easyui的datagrid用js插入数据等编辑功能的实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. [HNOI2010] 弾飞绵羊

    题目链接: 传送门 题目分析: 题外话: 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出: 根号算法牛逼!!! 显然,这是一道LCT裸题,然而在下并不会LCT于是采用了分块瞎搞 对于每个点 ...

  6. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) C

    Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...

  7. https://www.safaribooksonline.com/home/

    https://www.safaribooksonline.com/home/ https://www.safaribooksonline.com/library/view/instant-sikul ...

  8. Netty(2)Echo

    上节介绍的是discard协议,即不给客户端返回消息.本节主要说下,echo协议,即服务端收到消息后原样返回给客户端. 为了实现此需求,只需要在DiscardServerHandler中重写chann ...

  9. 048 Rotate Image 旋转图像

    给定一个 n × n 的二维矩阵表示一个图像.将图像旋转 90 度(顺时针).注意:你必须在原矩阵中旋转图像,请不要使用另一个矩阵来旋转图像.例 1:给出的输入矩阵 = [  [1,2,3],  [4 ...

  10. 通过代码理解Asp.net4中的几种ClientIDMode设置.

    以前我们可以通过ClientID在JavaScript脚本中服务器端控件.比如: document.getElementById("<%=控件.ClientID %>" ...