iOS项目持续集成

作者: Jiar_ | 来源:发表于2016-11-10 17:03 被阅读368次

    文章可能有更新,如需了解,请查看原文:iOS项目持续集成


    使用Jenkins持续集成

    使用Jenkins持续集成

    最近老是看到关于使用Jenkins持续集成方面的文章,于是也去折腾了,稍作整理,这里分享下我是如何使用Jenkins持续集成iOS项目的。

    相关博文

    使用shell命令

    利用Xcode自带的命令xcodebuild、xcrun通过shell对iOS项目进行打包上传至第三方测试平台(fir.im、蒲公英等平台)

    相关博文

    Jenkins持续集成的理解

    在你的mac上搭建好Jenkins,安装好相应的插件,在项目配置中关联代码仓库(git、svn),你可以设置固定时间点检查仓库或者固定时间循环检查仓库的方式来检查你的代码仓库,如仓库有变动,则执行编译等操作。每次编译,首先会将仓库中的代码update到本地,然后在本地编译,因此你可以使用本机的所有命令。

    如果你的iOS项目使用了Cocoapods,建议在提交代码的时候ignore如下:Pods文件夹、Podfile.lock文件XXX.xcworkspace文件`。如下图:

    ignore

    这样做的原因是pod来的代码,本来就是在第三方仓库,没必要再拉到自己的仓库里面占空间,这样设置之后,需要在Jenkins构建步骤添加Execute shell操作,并输入脚本pod install --verbose --no-repo-update。如下图:

    ExecuteShell

    我踩过的坑

    折腾这东西还真没少踩过坑,在这里分享一下,给入坑的同学提供一个解决的思路。

    Keychains and Provisioning Profiles Management

    iOS打包需要签名文件和证书,所以我们借助了这个插件Keychains and Provisioning Profiles Management,然而你会发现,我上面提供的博文中,人家的Keychains and Provisioning Profiles Management插件设置中的最下方有FilenameUUID这两个选项,如下图:

    HaveFileNameAndUUID

    而你的设置中却没有,如下图:

    NoFileNameAndUUID

    这里要注意下,我们要先上传自己的login.keychain文件,才能在下面的Keychains中显示出来。但是你点击图片中最上方的选择文件按钮时,你会发现你要选择的login.keychain文件在这个路径下面(/Users/Jiar/Library/Keychains),你根本无法选择到,这里一个简单的操作就是先把login.keychain拷贝到桌面再上传这个文件。

    进入Jenkins的全局设置,如下图:

    CodeSigning&OSXKeychainOptions

    上面的步骤中,我们已经设置好了签名文件和证书的路径,也上传了login.keychain文件,通过这个文件可以为项目选择签名文件对应的证书。同时也在Xcode中设置了Unlock Keychain的path(path实际路径我们在系统设置中设置好了,这里只是一个引用),同时输入了unlock密码(就是你mac的登录密码)。这些做好了,还差一步,那就是我们需要告诉这个项目,选择那个签名文件,才可以通过签名文件找到对应的证书。我们在项目的构建环境中勾选Keychains and Code Signing Identities,然后执行以下操作,如下图:

    KeychainsAndCodeSigningIdentities

    上传至第三方测试平台

    这里的第三方测试平台主要是fir.im蒲公英

    上传至fir.im

    首先你得先安装fir.im提供的上传工具fir-cli,使用如下命令安装:sudo gem install fir-cli --no-ri --no-rdoc
    你可以通过两种方式来使用这个工具上传app至fir.im。

    • 使用fir.im为Jenkins提供的插件。教程在这里
    • 直接用命令来上传,命令如下:fir p ${WORKSPACE}/build/TestJenkins.ipa -T #API Token#
    上传至蒲公英

    这里提供一个蒲公英官方api,要看点这里

    邮件通知

    首先要知道Jenkins自带一个邮件通知,但是无法自定义邮件内容的样子,然后都会使用一个第三方插件Extended E-mail Notification

    首先进入到系统设置里面,找到邮件通知,我这里使用的是163邮箱,网易163免费邮箱相关服务器信息如下图:

    163EmailHelp

    我们会发现使用SMTP服务,如果启用SSL协议,则有465994两个端口可以选择。如果不用这个协议,则使用25端口。

    我的设置如下图:

    邮件通知

    注意了,这里的密码不能使用你的邮箱登录密码,原因是163邮箱第三方登录需要设置授权码,同时,我们使用SMTP服务,也需要去邮箱设置好先,不然会不成功。如下两张图,分别对POP3/SMTP/IMAP客户端授权密码进行设置(没办法,为了安全,只好那么麻烦,记得把设置的授权码作为密码填入到邮件通知的密码栏里面去)

    POP3SMTPIMAP 客户端授权密码

    这些都设置好后,不出意外没什么问题了,点击邮件通知下面的通过发送测试邮件测试配置,填入一个邮箱测试一下是否成功。

    如果成功了,那么恭喜你,你可以把邮件通知这一块丢弃了,哈哈,因为刚才说了,我们不使用
    Jenkins自带的邮件通知服务,“那你还让我们这么配置干啥?逗我们玩?” 别急,这里主要是用了Jenkins自带的邮件通知服务进行邮箱测试,如果这里成功了,再把这些内容配置到第三方插件Extended E-mail Notification中,那就可以了。好了,接下来看Extended E-mail Notification,同样的,在Jenkins的系统设置中找到Extended E-mail Notification,由于Extended E-mail Notification内容很长,我分图片显示:

    ExtendedE-mailNotificationPart1 ExtendedE-mailNotificationPart2 ExtendedE-mailNotificationPart3

    在这个链接里面有邮件内容的说明:Jenkins进阶系列之——01使用email-ext替换Jenkins的默认邮件通知。当然,你可以查看Extended E-mail Notification自带的说明,在系统设置中找到Extended E-mail Notification,滚动到Extended E-mail Notification的底部,找到Content Token Reference选项,点击它最右边的问号图标,即可展开内容。如下图所示:

    EditableEmailNotificationStep1 EditableEmailNotificationStep2 EditableEmailNotificationStep3

    展开 Failure-Any

    EditableEmailNotificationStep4

    展开 Success

    EditableEmailNotificationStep5

    到此如何在Jenkins中使用邮件服务就已经配置好了,这里再次强调一点。我们的邮件服务使用的是Extended E-mail Notification插件,而不是Jenkins自带的邮箱服务,也就是说,不要在构建后操作中添加E-mail Notification操作。

    结束语

    以上就是我在使用Jenkins持续集成iOS项目中的分享,感谢我在文章中提到的博文的博主的分享。读者在阅读本文时如有发现错误或不恰当之处,欢迎在评论中指出。如果读者还有一些相关方面的疑问,也欢迎在评论中提出。

    欢迎关注我的个人微信订阅号,我将不定期分享开发方面的干货。

    Jiar's 微信订阅号

    相关文章

      网友评论

      • fir_im官方:看到文章中推荐 fir.im weekly.
        其实也可以用下 flow.ci https://flow.ci 开发测试自动化工具,
        对 iOS & Android 持续集成支持很友好了~
        fir_im官方:@Jiar_ :stuck_out_tongue_winking_eye:
        Jiar_:@fir_im官方 多谢推荐,我会去试试看的🌚

      本文标题:iOS项目持续集成

      本文链接:https://www.haomeiwen.com/subject/kesxpttx.html