Jenkins+Fastlane实践(iOS项目持续集成)

什么是Jenkins?

  Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。
  上面摘自一个Jenkins教程网站Jenkins教程。依我个人理解、实践,Jenkins简单理解就是一个Server端的自动化工具,帮助我们完成持续集成(CI:Continuous Integration)的相关工作。
  本文将通过Jenkins+Fastlane的方式,实现Serve端持续集成(本篇文章基于local server,也就是server在本机上)。

工作流程

  在开始之前,我们先看一下,我们可以做到什么地步?
  一次完整的交付流程如下:


Jenkins+Fastlane实践(iOS项目持续集成)_第1张图片

  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。
  安装好后,终端输入jenkinsjenkins start,Jenkins的服务就跑起来了。


  Jenkins默认占用了本地的8080端口,所以在浏览器中访问 http://localhost:8080,就是Jenkins的页面了。
  出于安全起见,Jenkins一开始锁住的,我们去Jenkins提供的路径下,找到密码以解锁:
Jenkins+Fastlane实践(iOS项目持续集成)_第2张图片

  输入密码后,来到Jenkins的设置页面:
Jenkins+Fastlane实践(iOS项目持续集成)_第3张图片

  Jenkins支持很多插件,比如Xcode打包、项目签名等,因为这里我们依赖于Fastlane打包,所以我们暂时先不安装打包相关的插件,这里先选择Install suggested plugins就好,然后等待这些插件安装完成就好了。
Jenkins+Fastlane实践(iOS项目持续集成)_第4张图片

  有些插件会安装失败,不过没关系,等所有插件都安装完后(要么成功、要么失败),刷新页面,然后右下角选择 continue就可以了。接着会创建一个管理员用户,正常创建就好了。紧接着登录用户,就来到了Jenkins的主页面:
Jenkins+Fastlane实践(iOS项目持续集成)_第5张图片

  如果忘记了用户名密码,可以找到 ~/.jenkins/secrets/initialAdminPassword这个文件中的密码,通过用户名 admin进行登录

创建一个新任务

  Jenkins中需要创建任务以完成各种自动化功能,这里我们点击创建一个新任务,然后选择构建自由风格的软件项目

Jenkins+Fastlane实践(iOS项目持续集成)_第6张图片

  进入到配置项目的页面后,就可以对这个任务进行一些配置了。这里针对我们公司的项目中用到的设置进行讲解。
Jenkins+Fastlane实践(iOS项目持续集成)_第7张图片
构建参数

Jenkins+Fastlane实践(iOS项目持续集成)_第8张图片
源码管理

  上面两项设置,就做到了对指定git仓库的拉取,并且允许我们在拉取的时候选择git的分支,当然参数是可以不用设置的,根据项目的需求进行配置即可。
  拉取完成后,就可以调起Fastlane进行项目构建了。在构建这一步设置中选择 执行shell
Jenkins+Fastlane实践(iOS项目持续集成)_第9张图片

  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到相应的相对路径

Jenkins+Fastlane实践(iOS项目持续集成)_第10张图片

  这样一个新的任务就配置完了,接着点应用,然后保存,就好了。退出来后,我们构建一下我们的项目,这样git上的代码就会checkout到本地了。
Jenkins+Fastlane实践(iOS项目持续集成)_第11张图片

  左下角可以看到Jenkins已经开始构建了:
Jenkins+Fastlane实践(iOS项目持续集成)_第12张图片

  点进去可以看到构建的详情:
Jenkins+Fastlane实践(iOS项目持续集成)_第13张图片

  Fastlane执行的也是测试的lane:
Jenkins+Fastlane实践(iOS项目持续集成)_第14张图片

  最终项目会编译完打包上传到蒲公英。

总结

  以上就实现了Jenkins+Fastlane的持续集成(CI),如果想做到公司里的每个人都可以打包,则需要弄一个server,Jenkins在server上配置好,大家访问server上的Jenkins页面,就可以进行各种自动化操作了。另外Jenkins还支持对git进行hook操作、定期打包等功能,大家感兴趣可以自己去尝试尝试。

彩蛋

  如果在文章的开头,就对Jenkins的老旧的UI没有了兴致,就关闭了本篇文章,那你就错过好东西了。Jenkins提供了另外一个插件Blue Ocean,一个皮肤插件,让Jenkins看起来更舒服。
  找到Jenkins的系统管理->插件管理->可选插件,搜索Blue Ocean,勾选后选择直接安装就可以了。等待所有插件都安装完成,点击返回首页,会发现多了一个Open Blue Ocean的选项:

Jenkins+Fastlane实践(iOS项目持续集成)_第15张图片

  然后就开始享受清新的船新UI吧:
Jenkins+Fastlane实践(iOS项目持续集成)_第16张图片

Jenkins+Fastlane实践(iOS项目持续集成)_第17张图片

用法补充

定时构建

  如果想定期对项目进行构建,比如想每天下班前打包、每隔几个小时打一个包等,则可以设置定时构建:

Jenkins+Fastlane实践(iOS项目持续集成)_第18张图片

  以上实现了每天18点进行一次构建的功能。
  关于具体的日程的格式,可以参考:
Jenkins定时构建

Git轮询

  另外如果想Git有新的提交时才打包,就可以使用Git轮询功能了:


Jenkins+Fastlane实践(iOS项目持续集成)_第19张图片

  这样每个小时会去查询Git上是否有新的提交,如果检查到新的提交,就会开始构建。


Jenkins+Fastlane实践(iOS项目持续集成)_第20张图片

  定时构建和轮询可以一起使用。

你可能感兴趣的:(Jenkins+Fastlane实践(iOS项目持续集成))