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