Jenkins学习系列——iOS打包任务的创建和配置
一、前言
在iOS开发过程种,我们习惯的方式是:创建工程-->修改代码-->Xcode调试-->符合预期要求-->发布,这在单个开发者的情况下固然没有问题,一台mac和一个Xcode就可以完成,但是在大公司和团队开发过程中,代码管理、打包管理和测试管理就会存在很大的问题,多个开发都会同时修改代码并提交,通常我们用git来管理这些代码,并由单独的人员打包以及测试代码的质量。jenkins不仅可以完成自动化打包的过程,还可以与测试平台进行持续集成。
iOS jenkins打包的原理是Xcode命令行编译,主要用到两条命令:xcodebuild和xcrun,这两个命令会随Xcode的安装而安装,下面举个使用例子:
/usr/bin/xcodebuild -scheme Demo4GT -configuration Release clean build -derivedDataPath .
/usr/bin/xcrun -sdk iphoneos PackageApplication -v Demo4GT/Build/Products/Debug-iphoneos/Demo4GT.app -o Demo4GT/Build/Products/Debug-iphoneos/Demo4GT_Demo4GT.ipa
二、准备工作
1、jenkins环境。搭建jenkins环境可以参考jenkins平台搭建和配置一节。需要注意的是,虽然涉及iOS开发,但是jenkins平台却不必搭建在mac机器上,只要在jenkins上添加mac节点就可以了。
2、iOS开发环境。iOS开发环境主要是指Xcode开发环境,Xcode是免费的,只要在苹果应用商店里下载一个就可以了。当然,还有重要的一点儿---开发者证书,现在个人也已经有免费的证书了,没有证书的话,只能打模拟器用的包了。
3、git项目。强烈建议把代码放在git上,这样便于团队开发。当然,不放git上也可以。
4、jenkins Xcode持续集成插件。常用的插件Xcode integration,这个插件能够快速的帮助我们进行Xcode打包配置,当然,只用纯shell脚本也是可以的。
在jenkins上打包之前,我们最好手工测试一下可以打包成功,首先用Xcode图形界面进行测试,然后用命令行测试,如果都能打包成功就可以挂在jenkins上运行了,毕竟jenkins的原理也是通过执行一系列命令来完成的。
三、jenkins配置
1、创建一个任务,创建任务的时候最好选自由风格的软件项目,这样配置起来比较方便,如果有需要,也可以选择其他的风格。
2、描述及丢弃旧的构建
2、描述及丢弃旧的构建
描述很简单,就是对这个项目的介绍,防止别人看不懂这个项目是干什么的。丢弃旧的构建是指将构建完的job进行删除,因为大量的构建会占用大量的硬盘空间,如果没有什么用途可以把旧的给删除,当然,如果某个构建比较重要,可以永久保留。丢弃旧的构建可以按照天数或者个数来保留。
参数化构建过程,是指在构造的时候添加相关的参数比如说iOS打包是debug还是release,在打包之前可以选择参数。这些参数可以代入后面的shell脚本中。参数的类型有bool或者string等类型。
限制构建执行的位置等。Restrict where this projeck can be run可以限制项目执行的位置,例如iOS打包只能在mac节点上执行,我们可以限制只在mac节点上打包。
源码管理器,可以选择git等工具,并填上自己的分支。
构建触发,什么时候开始触发构建。触发远程构建可以配置一个触发的URL,通过访问这个URL可以触发构建。Build after other projects are built是在其他项目构建完以后触发此次构建,常见的是打包完以后开始测试构建。Build periodically是周期性构建,当然可以配置每周一到周五上午8点到下午8点每隔两个小时构建一次的情况。Poll SCM代表每隔一段时间检查一个git仓库,如果仓库有变化就开始构建。
构建环境不再一一解释
增加构建步骤是构建中最重要的部分,这里选择Xcode比较方便,当然,如果选择执行shell脚本,你就要自己写一套shell来完成打包任务了。
然后配置Xcode的参数。Target可以不填,如果有多个的话最好填上。Clean before build最好打上,除非你想加快打包速度,大的项目不clean会出现莫名其妙的错误。Configuration可以配置是Release还是Debug。Build ipa文件以后可以配置文件的name和生成到的文件夹。在ipa文件命名中,可以采用系统变量来进行名字组合。
在iOS打包过程中,最麻烦的事情就是Code sign,Code Signing Identity允许你自定义打包的证书,从而替换项目本身的证书,比如说你用开发证书的项目可以被替换为发布证书而打出发布包。Unlock Keychain也是一个比较重要的地方,由于证书是一个很重要的东西,苹果对其做了保护,不能随意用,如果打包时发现证书权限有问题,那么就试试unlock keychain吧。
Xcode打包高级选项,如果有多个schema,最好配置一个schema,SDK可以自己指定,否则会使用默认的。Custom xcodebuild arguments可以填写用户自定义的参数,例如derivedDataPath参数。如果想要编译Xcode Workspace而不是一个project,要指定Workspace File,而Xcode Project Directory和Xcode Project File则是成套出现的。
增加构建后的步骤比较重要,比如说我们可以在构建成功以后把包放在一个url上,或者执行一系统shell、python脚本,或者增加邮件通知,都是可以的。
下面演示如果生成一个可以下载包的链接,选择Archive the artifacts,按规定artifacts的链接就可以了,比如说下面
在构建后操作中,你也可以执行脚本来触发其他的构建!