什么是Jenkins?
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。
上面摘自一个Jenkins教程网站Jenkins教程。依我个人理解、实践,Jenkins简单理解就是一个Server端的自动化工具,帮助我们完成持续集成(CI:Continuous Integration)的相关工作。
本文将通过Jenkins+Fastlane的方式,实现Serve端持续集成(本篇文章基于local server,也就是server在本机上)。
工作流程
在开始之前,我们先看一下,我们可以做到什么地步?
一次完整的交付流程如下:
Jenkins的作用:拉取Git代码、调用Fastlane;Fastlane的作用:编译项目、打包、上传ipa包到。所以Jenkins需要做的工作很少。
关于Fastlane
Fastlane是一些工具的合集,帮助我们实现持续交付(CD:Continuous Delivery),关于Fastlane如何实现自动化打包,可以参考我之前的关于Fastlane的文章:使用Fastlane对iOS项目持续集成(自动打包)
安装Jenkins
Jenkins是一款基于Web的软件,需要部署在Server上,我们这里就以本机为Server,所以将Jenkins上安装在本机上,通过localhost+端口号的方式进行访问,Jenkins的安装请看这里:通过homebrew安装Jenkins。
安装好后,终端输入jenkins
或jenkins start
,Jenkins的服务就跑起来了。
Jenkins默认占用了本地的8080端口,所以在浏览器中访问
http://localhost:8080
,就是Jenkins的页面了。出于安全起见,Jenkins一开始锁住的,我们去Jenkins提供的路径下,找到密码以解锁:
输入密码后,来到Jenkins的设置页面:
Jenkins支持很多插件,比如Xcode打包、项目签名等,因为这里我们依赖于Fastlane打包,所以我们暂时先不安装打包相关的插件,这里先选择Install suggested plugins就好,然后等待这些插件安装完成就好了。
有些插件会安装失败,不过没关系,等所有插件都安装完后(要么成功、要么失败),刷新页面,然后右下角选择
continue
就可以了。接着会创建一个管理员用户,正常创建就好了。紧接着登录用户,就来到了Jenkins的主页面:如果忘记了用户名密码,可以找到
~/.jenkins/secrets/initialAdminPassword
这个文件中的密码,通过用户名admin
进行登录
创建一个新任务
Jenkins中需要创建任务以完成各种自动化功能,这里我们点击创建一个新任务,然后选择构建自由风格的软件项目:
进入到配置项目的页面后,就可以对这个任务进行一些配置了。这里针对我们公司的项目中用到的设置进行讲解。
上面两项设置,就做到了对指定git仓库的拉取,并且允许我们在拉取的时候选择git的分支,当然参数是可以不用设置的,根据项目的需求进行配置即可。
拉取完成后,就可以调起Fastlane进行项目构建了。在构建这一步设置中选择执行shell:
Jenkins会将之前设置的git仓库上的项目代码checkout到本地,所以我们尽量让Fastlane也在git仓库上(fastlane文件夹在git上的项目的目录下),这样shell脚本只需要两步,就可以直接调起Fastlane了,1、cd到Jenkins checkout下来的项目的fastlane目录下;2、执行Fastlane命令。所以shell脚本内容如下,这里用到了之前设置的参数
env
,使用了shell的if-else语句,写起来还比较简单:
if [ $env == "测试环境" ]; then
# fastlane构建测试环境的ipa
Fastlane ios dev
else
# fastlane构建线上环境的ipa
Fastlane ios formal
fi
这里可以看一下我们项目的目录结构(工作空间本来是看不到的,执行过一次左侧的Build with Parameters才会有,可以先往后面看,之后再回来看这一部分的内容),我们的fastlane文件夹就在项目的根目录下,所以我们无需cd就可以直接执行fastlane,如果你们的项目的fastlane文件夹在更深的目录下,则需要cd到相应的相对路径下
这样一个新的任务就配置完了,接着点应用,然后保存,就好了。退出来后,我们构建一下我们的项目,这样git上的代码就会checkout到本地了。
左下角可以看到Jenkins已经开始构建了:
点进去可以看到构建的详情:
Fastlane执行的也是测试的lane:
最终项目会编译完打包上传到蒲公英。
总结
以上就实现了Jenkins+Fastlane的持续集成(CI),如果想做到公司里的每个人都可以打包,则需要弄一个server,Jenkins在server上配置好,大家访问server上的Jenkins页面,就可以进行各种自动化操作了。另外Jenkins还支持对git进行hook操作、定期打包等功能,大家感兴趣可以自己去尝试尝试。
彩蛋
如果在文章的开头,就对Jenkins的老旧的UI没有了兴致,就关闭了本篇文章,那你就错过好东西了。Jenkins提供了另外一个插件Blue Ocean
,一个皮肤插件,让Jenkins看起来更舒服。
找到Jenkins的系统管理->插件管理->可选插件
,搜索Blue Ocean
,勾选后选择直接安装就可以了。等待所有插件都安装完成,点击返回首页
,会发现多了一个Open Blue Ocean
的选项:
然后就开始享受清新的船新UI吧:
用法补充
定时构建
如果想定期对项目进行构建,比如想每天下班前打包、每隔几个小时打一个包等,则可以设置定时构建:
以上实现了每天18点进行一次构建的功能。
关于具体的日程的格式,可以参考:
Jenkins定时构建
Git轮询
另外如果想Git有新的提交时才打包,就可以使用Git轮询功能了:
这样每个小时会去查询Git上是否有新的提交,如果检查到新的提交,就会开始构建。
定时构建和轮询可以一起使用。