Jenkins项目实战之-xcode+jenkins自动化打iOS包

        前面两篇文章详细介绍了如何在Jenkins上实现了android打包,这篇继续折腾,介绍如何基于xcode插件在jenkins上打包。由于前面介绍详细,所以,本篇,不是重点地方,就不贴图显示。这次研究iOS打包的时间比android还要多一天,看了很多别人介绍的xcode的jenkins打包,跟着别人做了一半,发现不适合自己情况,或者没法继续走下去。因为你出现的报错,人家在博客里没有出现。反反复复,最后还是捣鼓出来了。

1.我的项目环境信息

       在开始介绍Jenkins打包之前,我把我项目信息写出来。我想,很多人是没有写这个习惯,结果很多人跟着你做,肯定失败很多,而且问题很奇怪,网上检索试了很多办法,还是无法解决。为了尽量避免这个情况,我先交代我的项目环境信息。一个Macpro笔记本,系统是10.12版本,xcode安装的版本是8.3.2。这次查找资料,有人说在jenkins上的插件不支持在Mac系统10.10之后,也就是说jenkins打包失败。但是这次,我成功了。

2.前提条件

       这里提下前提条件,安装了java并且设置了环境变量。安装了tomcat,设置一个文件下载地址,这个可选,方便打包后续操作。找到好证书和开发组ID等信息,还有系统登录秘钥。证书和开发组织或者开发team的ID,如果是测试,就去问开发要。还有,这里,默认你安装了Jenkins环境。

3.安装插件

       这里,主要安装xcode插件和keychans和provision profile管理插件,其他的svn, 邮件插件,前面已经介绍,这里不多说。

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

4. 秘钥和profile文件上传

        在系统管理-keychains and provisioning profies management页面,先上传系统登录秘钥,文件login.keychain在路径/users/你的用户名称/Library/keychains目录下,点击上传。然后上传profile文件,这个profile文件,路径是/users/你的用户名称/Library/MobileDevice/Provioining Profile/,至于具体是哪个一个profile文件,这里有一个技巧。在你机器上的xcode手动打包过程中,在导出步骤中,选择证书的时候,会显示这个profile的位置,你点击XC Ad Hoc xxxx最右边的箭头,就可以打开这个uuid开头的mobileprofile文件。上传完profile文件,然后,点击秘钥中添加Code Signing identity,具体看看你这个证书有多少个不同的identity,最好都加上,效果如下图。

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

有些地方我擦除了公司信息字段,你注意下,看看对比着你们自己的添加。

5. 系统设置配置秘钥和开发ID

点击系统管理-系统设置,下拉可以看到xcode路径信息等,点击添加秘钥和deveploment team id。

Jenkins项目实战之-xcode+jenkins自动化打iOS包

这个地方最好添加,因为添加之后,在后面job设置就可以选择,不需要你自己再输入一遍。

6.Job设置

6.1 参数化构建

       参数化我这边根据实际需要,设置了三个参数。第一个参数是决定打Release还是Debug包。第二个参数,我们是根据这个参数,来选择打不同网站后台环境的包,主要有测试环境,准生产环境,生产环境。第三个参数,是版本号,主要作用就是用来包名的命名规范化。

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

6.2 源码管理和构建触发器

       源码管理和构建触发器,是否选择poll SCM,这里不配置,源码配置你们公司的就可以。等实现了打包功能,再回来配置SCM。

6.3 构建环境

主要是构建keychina 和mobile profile设置

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

       注意,观察到没,这里其实是选择项,选择后,自动填充上面信息。因为,我们在keychans和profile插件上配置好,这里就可以选择。第一个创建job配置过程是不可以下拉选择。你需要点击保存当前job配置,然后立马构建一次,这次构建拉取完代码后就生成了WORKSPACE,这个概念很重要。有了这个目录生成,我们再次回到这个配置页面,这个时候就可以下拉选择秘钥和profile文件。

6.4 构建

6.4.1 构建1-shell脚本

       这里还记得上面我设置第二个参数,叫env,主要有三种选择,测试,准生产,生产。可以根据这个变量的值,来确定修改配置文件的参数。一开始,我花了很多时间,在尝试通过shell脚本或者python脚本去修改我们项目的一个配置文件,叫XXService.h,里面有两行,define  xxxxx   0  第二行 define yyyyy 1。我们就是控制两行中0和1,来确定是测试环境,还是准生产环境,或者线上环境。发现shell或者python都无法完美实现对这两行进行替换值,具体不知道什么原因。之后,实在没有办法,我就把xxService.h文件复制三份:XXService_test.h, XXService_preonline.h,  XXService_online.h,手动提前在这三份文件内设置好0和1的组合。所以,通过shell中的case语法,可以帮我实现这个文件的替代功能。没错,就是整个配置文件去替代,利用linux cp命令,就这样简单粗暴,效果反而更好。

Jenkins项目实战之-xcode+jenkins自动化打iOS包

      解释一下y,buildfiles这个文件夹,是我自己创建,然后放上面三套环境设置好的配置文件。根据打包用户,选择的环境,去执行对应环境的配置文件的替换。我还在每次替换后面,通过echo 打印一个日志到控制台,方便测试是否成功拷贝和替换了配置文件。

6.4.2 xcode插件配置

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

Jenkins项目实战之-xcode+jenkins自动化打iOS包

.Jenkins项目实战之-xcode+jenkins自动化打iOS包

       注意到Xcode Schema File,这个时候,你需要在Mac上打开Xcode,然后Edit Schema,勾选你的Schema,记得要构建共享,记得在这个对话框下面位置勾选共享,记得勾选共享,重要的事情说三遍,否则会报错的。大概是 project  xxx has no xxx schema file,具体描述不记得了。

6.4.3 拷贝包和重命名

       到上面,所有配置都完成,点击构建会成功生成一个xxx.ipa的包,xxx就是你们项目的schema名称。如果再次构建,会发现这个xxx.ipa会删除。这里,我们需要利用shell脚本把包拷贝到一个共享文件夹里,然后在拷贝过程,进行命名操作。这里命名利用了第二个参数和第三个参数。命名效果是 xxx-v3.xx-test-201710202243.ipa,类似这样的文件名称。直接看shell 脚本吧。

Jenkins项目实战之-xcode+jenkins自动化打iOS包

       两个红圈是重命名包前后的文件名称,这里用到了好几个参数,当前上面版本我忘了改成变量引用。到这里,iOS在Jenkins上的自动化打包的核心功能就完成。后续的发送构建邮件,显示下载路径等相关信息,请参考前面安卓打包的配置。