本文详细介绍了开发过程,提高效率进行IOS-Jenkins持续集成。

第二http://blog.csdn.net/monkey_cool/article/details/43270885

背景

平时我们开发完毕IOS项目,须要打包给測试人员进行測试。当中的过程须要反复进行:改动配置项--编译---连接设备--执行打包--debug进设备中--然后交给等待的測试人员。现有成熟的持续集成Jenkins解决方式。而且该方案也提供了Xcode插件的支持,能够讲上述过程封装成一键解决方式。

我实现的是jenkins运行IOS的job,buildproject。签名打ipa包,上传到FTPserver。放到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中放入我们的代码project(这是官方的解决方式)。

文件夹结构见下图。

这样workspace中就有了代码。

5.构建xcode项目

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

在以下还有个xcode的高级參数配置。如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

scheme配置。以及须要build执行的SDK,这里选择iphoneos(这是要准备在真机上执行),还有构建的输出文件夹。

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

如今到这。说明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。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

找到右側的ftp,开启就可以。

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

我设置的自己电脑。所以localhost了。设置ftp的根路径root repository path。填入本机的usernamepassword。

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

见图,设置须要上传的文件以及其对应的文件夹。如今ipa程序文件的上传,我们须要将build文件夹生成后的ipa文件上传到ftpserver的一个文件夹。我们为了兴许通过tomcat服务进行手机下载。所以上传到tomcat的文件夹下。

上传成功会在tomcat下有此文件夹结构,见图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbW9ua2V5X2Nvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

这样我们上传文件到ftpserver的就实现了。

8.Tomcat服务

然后我们须要设置tomcat服务,以方便手机可通过网页下载并安装我们的应用。

下载tomcat,进入tomcat的bin文件夹,运行命令,

sh startup.sh

启动tomcat。

新建一个简单的web项目,这个请简单看下web自己实现。然后放到tomcat的webapps以下,改动tomcat的訪问port8088,与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. 手把手教你利用Jenkins持续集成iOS项目

    前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...

  2. Jenkins持续集成相关文章整理

    构建iOS持续集成平台(一)——自动化构建和依赖管理 构建iOS持续集成平台(二)——测试框架 构建iOS持续集成平台(三)——CI服务器与自动化部署 使用Jenkins搭建iOS开发的CI服务器 一 ...

  3. python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?

    python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windo ...

  4. jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

    我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安 ...

  5. 【转】jenkins持续集成配置

    搭建jenkins持续集成服务器 1.jenkins简介 Jenkins,前身为Hudson,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,包括: 持续的软件版本发布/测试项目. 监控 ...

  6. Jenkins持续集成

    Jenkins持续集成 & .NET   最近受累于测试环境每次发布都很麻烦,而且我们有多个测试环境,因此专门抽时间做了Jenkins的配置和研究. 折腾了两天终于绿灯以后,先来个截图,Blu ...

  7. Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现

    前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...

  8. Docker+Jenkins持续集成环境(5): android构建与apk发布

    项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...

  9. windows部署jenkins持续集成maven测试项目不能访问测试报告

    买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...

随机推荐

  1. WebGL自学教程——WebGL演示样例:開始

    最终開始WebGL的演示样例了,...... 開始 使用WebGL的步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊> ...

  2. NGUI研究之在Unity中使用贝塞尔曲线

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...

  3. ARMv8 Linux内核异常处理过程分析

    NOTE:为了方便大家阅读,制作了PDF版文档.下载请猛戳这里 老样子,为了赚点积分下载其它人的文件,下载以上资料须要资源分2分. 假设没有积分请留言全部文档,留下邮箱就可以. 看了Linaro提供的 ...

  4. C#区域截图——调用API截图

    原文:C#区域截图——调用API截图 前言:截图对于一个C++开发者来说无非是小菜一碟,也有朋友使用C#的 Graphics.CopyFromScreen 方法屏幕操作,作为一名整天想着用 C++ 开 ...

  5. 【python】按行切分文本文件

    python脚本利用shell命令来实现文本的操作, 这些命令大大减少了我们的代码量. 比如按行切分文件并返回切分后得到的文件列表,可以利用内建的split命令进行切分.为了返回得到的文件列表名,可以 ...

  6. linux下安装cmake和mysql遇到的问题总结

    首先是在安装cmake的过程中遇到的问题: 1.開始使用yum命令安装时,不知道为什么一直不行,然后就准备wget 来先下载压缩包,再手动编译. 因为网络限制,wget不能下载外网的东西一直显示con ...

  7. java日历程序版本

    //MainFrame.java package com.huowolf.myCalender; import java.awt.BorderLayout; import java.awt.Color ...

  8. WPF如何获得变量异步回调函数时产生的异步回调

    有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...

  9. lightoj1027(期望dp)

    有一个迷宫,有n个门,走每个的概率都是相同的 每个门有一个数字,如果是正数ai,那么表示走ai天就能走出迷宫,如果是负数,那么走-ai天会回到原地,然后会忘记之前的事情,继续选择门去走 所以,如果都是 ...

  10. windows phone (17) ManipulationDelta事件

    原文:windows phone (17) ManipulationDelta事件 ManipulationDelta事件会是在触摸位置发生变化是引发,比如可以根据用户在触摸屏中移动的位置,图片发生相 ...