0%

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的全局设置,如下图:

ProvisioningProfilesDirectoryPath

这里设置好签名文件以及证书路径后,到时候在项目中引用这个路径即可,如下图,在项目中引用这里设置的路径。(首先你要在项目的构建步骤里面添加Xcode步骤,然后在XcodeCode signing & OS X keychain options项里面勾选Unlock Keychain?,进行配置路径)

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选项,点击它最右边的问号图标,即可展开内容。如下图所示:

ContentTokenReference

在系统设置中设置好默认值后,打开项目设置,在构建后操作中添加Editable Email Notification。配置如图所示:

EditableEmailNotificationStep1

EditableEmailNotificationStep2

EditableEmailNotificationStep3

展开 Failure-Any

EditableEmailNotificationStep4

展开 Success

EditableEmailNotificationStep5

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

结束语

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

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

Jiar's 微信订阅号