Jenkins + SVN实现iOS项目持续集成(Continuous Integration)

随着项目的不断推进,参与的人员越来越多,内容越来越复杂,构建项目本身可能就变成了复杂又耗时的工作。持续集成(Continuous Integration,简称CI),作为一种团队开发实践方法,很好的解决这些问题。它可以让开发团队专注于业务需求,让测试团队更快的构建项目检测问题,加快项目进度。

Jenkins作为一种持续集成的方案,由于其丰富的插件和较高的可控性,备受大家喜爱。

安装Jenkins

  • 首先到官方网站下载Jenkins安装包,由于它是Java项目所以依赖JDK

下载JDK

下载JDK

下载Jenkins

下载Jenkins

  • 找到下载的jenkins.pkg安装包,安装时注意在选择 安装类型 阶段选择自定义安装。

    Jenkins自定义安装

  • 取消 Start at boot as "jenkins"

    取消勾选

  • 安装完成后在Terminal中输入
    $ open /Applications/Jenkins/jenkins.war

    $ java -jar /Applications/Jenkins/jenkins.war
    启动Jenkins

配置Jenkins

  1. 打开http://localhost:8080会出现重设初始密码的界面。根据界面中的路径提示去相应文件中取出密码。
  2. 创建一个用户
  3. 安装插件Xcode integrationKeychains and Provisioning Profiles Management
    打开Jenkins->系统管理->插件管理->可选插件,安装这两个插件。
    安装插件

4.配置Keychains and Provisioning Profiles Management

Jenkins->系统管理->Keychains and Provisioning Profiles Management。

配置证书相关
  • Upload Keychain or Provisioning Profile File这里上传的是 /Users/你的用户/Library/Keychains/login.keychain 这个文件,如果你的系统中有login.keychain-db这个文件,请把它拷贝出来,重命名成login.keychain再上传。

  • Code Signing Identity这里填写 证书名称

  • Provision Profiles Directory Path这里填写与证书相对应的描述文件的路径,这个路径可以是自定义路径。

  1. 配置Xcode integration

Jenkins->系统管理->系统设置->Xcode Builder

Xcode Builder设置
  1. 新建项目
  • Jenkins->新建
新建工程
  • 选择->构建一个自由风格的软件项目


    创建自由风格项目
  • 填写项目信息


    填写项目信息
  • 填写SVN配置
    Repository URL 填写SVN项目路径。
    Credentials填写SVN用户。

填写SVN配置
  • 增加SVN用户信息


    增加SVN用户信息
  • 填写构建信息
    这里需要注意一点,如果第一次点开Keychain and Code Signing Identites后发现,Code Sign Identity 如果不能选择,那先点击保存,再打开项目来继续设置。

    填写构建信息

  • 填写Mobile Provisioning Profiles

    填写Mobile Provisioning Profiles

  • 增加 构建
    注意:这里如果Xcode的版本低于9.0,就可以正常输出ipa包。如果Xcode版本不低于9.0,就会由于Xcode 9.0不在允许你访问钥匙串里的内容(具体原因看这里),而输出ipa失败。具体的解决方法请参照后面"遇到的问题"中具体的解决方法。

如果你的Xcode版本低于9.0那么请继续向下看😄
增加构建步骤->Xcode

增加构建步骤
  • 填写iOS项目Target名称
    填写后点击 Setting 设置其他参数

    填写iOS项目Target名称

  • 填写Setting信息
    其中注意 Output Directory 是生成iPA包的路径 ${WORKSPACE}是项目在Jenkins中的工作目录。

    填写Setting信息

  • 设置Code signing & OS X keychain options

    设置 Code Signing & OS X keychain options

    Development Team ID填写开发团队的ID,它可以在钥匙串中的证书详情里查看(右键证书->查看详情)。
    勾选Unlock Keychain,选择上传的login.keychain文件。

  • 如果项目里使用了workspace ,那还需要配置Advanced Xcode build options

Advanced Xcode build options

Xcode Schema File填写iOS项目中工程名
Xcode Workspace File填写iOS workspace文件的绝对路径

  • 开始构建项目
    点击保存,返回到Test_Project_1构建下,选择立即构建


    立即构建

这时会有进度条显示,构建进度,点击进入之后可以查看Log


构建进度

构建后的操作

构建完成后,可以选择将ipa包上传到自己的服务器,也可以用fir或者蒲公英等第三方服务。

遇到的问题

  • Xcode版本高于9.0 ,使用Xcode Builder构想项目的时候会出现导出ipa失败。
导出ipa失败
error: exportArchive: "Your.app" requires a provisioning profile with the Push Notifications feature.
Error Domain=IDEProvisioningErrorDomain Code=9 ""Your.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="Your.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
** EXPORT FAILED **

最后错误提示,EXPORT FAILED,推断导出ipa包时出的错。根据最后提示
Add a profile to the "provisioningProfiles" dictionary in your Export Options property list
google一下,发现Xcode 9.0不允许访问钥匙串里的内容。

解决方案: 在构建中添加Execute Shell替代Xcode Builder

选择Execute Shell

使用脚本替代插件(插件本质是通过我们的配置生成打包脚本并执行)。

脚本内容

  • 脚本内容
xcodebuild -archivePath "/Users/你的用户/.jenkins/workspace/你的Jenkin构建项目名/output/debug/name.xcarchive" -workspace name.xcworkspace -sdk iphoneos -scheme "schemename" -configuration "Release" archive
xcodebuild -exportArchive -archivePath "/Users/你的用户/.jenkins/workspace/你的Jenkin构建项目名/output/debug/name.xcarchive" -exportPath "/Users/你的用户/.jenkins/workspace/你的Jenkin构建项目名/ipa/" -exportOptionsPlist '/Users/chaos/.jenkins/workspace/你的Jenkin构建项目名/ipa/ExportOptions.plist' -allowProvisioningUpdates

按照你的实际项目情况替换脚本中的内容
name.xcarchive =>TargetName.xcarchive
name.xcworkspace => iOS 项目 workspace 名字
schemename => scheme manage中的名字

其中ExportOptions.plist ,直接使用Xcode导出iPA同文件夹中的同名文件就行。

ExportOptions.plist文件位置

ExportOptions.plist文件请放在Jinkens的workspace,构建项目文件夹下。
脚本中ExportOptions.plist路径可以自定义。


ExprotOptions.plist位置

扩展

最后

感谢阅读,如果对大家有帮助,请在github上follow和star,本文发布在逆流的简书博客,转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容