前几天有个朋友给我分享了篇使用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的安装
打开安装包后显示以下界面,选择继续
选择自定义,进入下一步
取消“Start at boot as "jenkins",点击安装就可以了
安装完后可以点击/Applications/Jenkins/jenkins.war启动jenkins
或直接在在终端中输入命令行打开Jenkins:
open /Applications/Jenkins/jenkins.war
这时候如果还没安装JDK的话,可能会弹出下面这个窗口提示你安装
点击”等多信息“会跳到相应下载页面,下载安装完JDK重新启动Jenkins就能运行了。
2、配置Jenkins
启动Jenkins用浏览器打开: http://localhost:8080/
就能进入Jenkins配置页面了,如果端口冲突可以通过下面命令修改端口
defaults write /Library/Preferences/org.jenkins-ci httpPort 7070
其中红色框框部分是我已经建立好的两个项目,第一次进入Jenkins的时候是没有的。
安装插件:
第一次进入Jenkins需要安装好下面几个插件:Xcode integration、Post-Build Script Plug-in。如果你使用的是git管理的代码,还需要再装下:GIT plugin和GitHub plugin。
选择“系统管理” -> “管理插件” -> “可选插件”,在过滤框中输入插件名称,勾选后点击“直接安装”就可以了
3、创建、配置项目
新建 -> 输入项目名称 -> 选择“构建一个自由风格的软件项目” -> 点击ok就行了。
这里有个点需要注意,项目名称最好不要包含空格或特殊符号,不然后面使用shell脚本进行打包的时候会给自己挖坑。
创建好项目之后点击进入配置
到这里一个项目算创建好了,先剧透下Jenkins从svn上拉下来的代码文件目录结构长啥样:
其中workspace文件夹就是Jenkins环境变量“${WORKSPACE}”对应的目录,可以在终端输入命令:
open ~/.jenkins/jobs/
打开
3.1 配置使用Xcode自动打包发布fir
第一个创建的项目叫“我去炒股1.2.0”,用来配置xcode自动打包发布。
选择svn填好路径,第一次配置会要求输入账户密码,以后就会自动记住了。
Check-out Strategy最好选择每次update最新代码前都revert下,而不是“Use 'svn update' as much as possible” ,因为我使用的是cocoa pod管理的第三方,每次打包运行pod install会修改了工程配置文件,如果下次自动打包前不先revert再update的话会出现冲突。
因为我使用的是cocoa pod管理的第三方,打包前先运行
pod install --verbose --no-repo-update
安装下第三方库
其中“${HOME}/Library/Keychains/login.keychain”是钥匙串路径,这是固定的。
下面添加的是打包成功后让Jenkins继续执行的操作,我们的目的是使用fir命令行把生成ipa包发布到fir.im上去
执行fir命令,其中fbea410df57d9d7536f43c74f8700ff2是我的fir账号生成的api token。
到这一步,Jenkins配置使用Xcode自动打包发布fir已经全部完成了,切回主页面
点击1会进入到状态2,标明正在打包。或如下图,进入项目里面选择“立即构建”,也会开始打包。编号50代表这是我第50次尝试构建打包。
直到动画结束,表示打包完成
可是如果编号前面的小圆圈是红的,则说明打包失败,可以点击进去查看失败log。
打开fir.im登录到我的账户,进去,可以看到未打包成功前是这样
打包成功后,刷新下页面就可以看到Jennkins已经帮我把测试包自动上传上去了
3.2 Jenkins配置使用shell脚本打包发布fir
使用shell脚本打包需要配置的东西比xcode要少,麻烦的就是需要自己写个shell脚本。为了尝试,我又创建了个“我去炒股1.2._script”工程。
svn的配置跟3.1保持一致
唯一的区别就是,打包、签名、上传fir等粗重或我都交给shell脚本来干了:
从Jenkins拉下来的代码目录来看,我的shell脚本在工作目录下的YTStockTradin文件夹下面。
好人做到底,附上我写的shell脚本:其中打不同包只需要修改“PROFILE_NAME”指定不同概要配置文件即可。
最后,吐槽下前面提到的“项目名称不要使用空格或特殊符号”的问题,我刚开始命名的是“我去炒股 1.2.0”,中间带了个空格,结果发现在Jenkins的工作空间里shell脚本只能无法定位到当前,用“echo | pwd”命令打印当前目录结果如下:
说明shell脚本只能定位到当前用户目录而已,这就郁闷了。。。
我又把脚本copy一份放到desktop,echo | pwd 运行打印出来的路径完全正确,真是日了狗~~~
shell命令我本身就不熟,查了很久,问了几个同事都没找到原因,最后还是坪哥给力,一下子就找到问题所在:路径名称不规范。
改了项目名之后就ok了,运行结果参照 3.1 。
特别感谢:苏波波和坪哥给了我不少指导和帮助 !!
参考:
iOS 下如何自动化打包 App
Jenkins+GitHub+Xcode+fir搭了一个持续集成环境
*jenkins*iOS项目持续集成(SVN+Cocoapods+Workspace)实战扩展(修改版)
Jenkins(二) 安装、新建Jobs与删除及SVN配置