Jenkins实现svn代码管理下IOS自动化打包+发布fir实践

前几天有个朋友给我分享了篇使用Jenkins实现自动打包发布的文章,我一看这不就是前东家用的那一套么,刚好我之前一篇总结“ios自动化构建”实现了shell脚本打包,可以将两者合起来一起用,好玩~~~废话少说,奔主题~

工欲善其事必先利其器,先准备好需要用到的工具:Jenkins、JDK(Jenkins用到)、fir命令行工具。另外,在这里我用Jenkins分别尝试了Xcode打包(3.1)shell脚本打包(3.2) 两种不同方式。

注. fir命令行工具可直接运行:sudo gem install fir-cli --no-ri --no-rdoc   安装。

1、Jenkins的安装

打开安装包后显示以下界面,选择继续

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第1张图片
1

选择自定义,进入下一步

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第2张图片
2

取消“Start at boot as "jenkins",点击安装就可以了

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第3张图片
3

安装完后可以点击/Applications/Jenkins/jenkins.war启动jenkins

或直接在在终端中输入命令行打开Jenkins:

open /Applications/Jenkins/jenkins.war

这时候如果还没安装JDK的话,可能会弹出下面这个窗口提示你安装

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第4张图片

点击”等多信息“会跳到相应下载页面,下载安装完JDK重新启动Jenkins就能运行了。

2、配置Jenkins

启动Jenkins用浏览器打开: http://localhost:8080/

就能进入Jenkins配置页面了,如果端口冲突可以通过下面命令修改端口

defaults write /Library/Preferences/org.jenkins-ci httpPort 7070

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第5张图片

其中红色框框部分是我已经建立好的两个项目,第一次进入Jenkins的时候是没有的。

安装插件:

第一次进入Jenkins需要安装好下面几个插件:Xcode integration、Post-Build Script Plug-in。如果你使用的是git管理的代码,还需要再装下:GIT plugin和GitHub plugin。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第6张图片
1

选择“系统管理” -> “管理插件” -> “可选插件”,在过滤框中输入插件名称,勾选后点击“直接安装”就可以了

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第7张图片
2

3、创建、配置项目

新建 -> 输入项目名称 -> 选择“构建一个自由风格的软件项目” -> 点击ok就行了。

这里有个点需要注意,项目名称最好不要包含空格或特殊符号,不然后面使用shell脚本进行打包的时候会给自己挖坑。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第8张图片



创建好项目之后点击进入配置

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第9张图片
2


到这里一个项目算创建好了,先剧透下Jenkins从svn上拉下来的代码文件目录结构长啥样:

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第10张图片
3

其中workspace文件夹就是Jenkins环境变量“${WORKSPACE}”对应的目录,可以在终端输入命令:

open ~/.jenkins/jobs/

打开

3.1 配置使用Xcode自动打包发布fir

第一个创建的项目叫“我去炒股1.2.0”,用来配置xcode自动打包发布。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第11张图片
1

选择svn填好路径,第一次配置会要求输入账户密码,以后就会自动记住了。

Check-out Strategy最好选择每次update最新代码前都revert下,而不是“Use 'svn update' as much as possible” ,因为我使用的是cocoa pod管理的第三方,每次打包运行pod install会修改了工程配置文件,如果下次自动打包前不先revert再update的话会出现冲突。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第12张图片
2

因为我使用的是cocoa pod管理的第三方,打包前先运行

pod install --verbose --no-repo-update

安装下第三方库

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第13张图片
3


Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第14张图片
4

其中“${HOME}/Library/Keychains/login.keychain”是钥匙串路径,这是固定的。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第15张图片
5
Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第16张图片
6

下面添加的是打包成功后让Jenkins继续执行的操作,我们的目的是使用fir命令行把生成ipa包发布到fir.im上去

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第17张图片
7

执行fir命令,其中fbea410df57d9d7536f43c74f8700ff2是我的fir账号生成的api token。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第18张图片
8

到这一步,Jenkins配置使用Xcode自动打包发布fir已经全部完成了,切回主页面

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第19张图片
9

点击1会进入到状态2,标明正在打包。或如下图,进入项目里面选择“立即构建”,也会开始打包。编号50代表这是我第50次尝试构建打包。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第20张图片
10

直到动画结束,表示打包完成

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第21张图片
11

可是如果编号前面的小圆圈是红的,则说明打包失败,可以点击进去查看失败log。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第22张图片
12

打开fir.im登录到我的账户,进去,可以看到未打包成功前是这样

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第23张图片
13

打包成功后,刷新下页面就可以看到Jennkins已经帮我把测试包自动上传上去了

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第24张图片
14


3.2 Jenkins配置使用shell脚本打包发布fir

使用shell脚本打包需要配置的东西比xcode要少,麻烦的就是需要自己写个shell脚本。为了尝试,我又创建了个“我去炒股1.2._script”工程。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第25张图片
1

svn的配置跟3.1保持一致

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第26张图片
2

唯一的区别就是,打包、签名、上传fir等粗重或我都交给shell脚本来干了:

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第27张图片
3

从Jenkins拉下来的代码目录来看,我的shell脚本在工作目录下的YTStockTradin文件夹下面。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第28张图片
4

好人做到底,附上我写的shell脚本:其中打不同包只需要修改“PROFILE_NAME”指定不同概要配置文件即可。

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第29张图片
5

最后,吐槽下前面提到的“项目名称不要使用空格或特殊符号”的问题,我刚开始命名的是“我去炒股 1.2.0”,中间带了个空格,结果发现在Jenkins的工作空间里shell脚本只能无法定位到当前,用“echo | pwd”命令打印当前目录结果如下:

Jenkins实现svn代码管理下IOS自动化打包+发布fir实践_第30张图片
6

说明shell脚本只能定位到当前用户目录而已,这就郁闷了。。。

我又把脚本copy一份放到desktop,echo | pwd 运行打印出来的路径完全正确,真是日了狗~~~

shell命令我本身就不熟,查了很久,问了几个同事都没找到原因,最后还是坪哥给力,一下子就找到问题所在:路径名称不规范。

改了项目名之后就ok了,运行结果参照 3.1 。


特别感谢:苏波波和坪哥给了我不少指导和帮助 !!


参考:

iOS 下如何自动化打包 App

Jenkins+GitHub+Xcode+fir搭了一个持续集成环境

*jenkins*iOS项目持续集成(SVN+Cocoapods+Workspace)实战扩展(修改版)

Jenkins(二) 安装、新建Jobs与删除及SVN配置

你可能感兴趣的:(Jenkins实现svn代码管理下IOS自动化打包+发布fir实践)