Jenkins+cocoapods+pgy+多版本 持续集成

持续集成?

持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

先看下我的需求
  • 持续集成,
  • 使用cocoapod管理第三方控件,
  • 使用pgy分发,
  • 同时管理三个版本(内测版,开发版,AppStore上线版),并且每个版本都要做到尽量高自动化的持续集成
再来看看思路
  • 使用Jenkins进行持续集成
  • 使用多Scheme管理多版本,并通过配置Jenkins编译不同的Scheme做到多版本自动化持续集成
  • 当然持续集成的前提是单元测试尽量覆盖全面
有了思路就一步一步做吧。
1. 准备好xcode项目scheme配置,做到各个版本分离
  1. 添加两个scheme
    我们在项目里需要有两个 Scheme. 这两个 Scheme 在 Debug 时候的行为是一样的, 但在 Archive 的时候, 一个用于 Staging 版本发布内部测试, 一个用于 App Store 发布.

    Scheme 的设置入口在菜单上: “Product” -> “Scheme” -> “Manage Schemes”.
  2. 添加新的编译配置 ForBeta
  3. 设置scheme对应的编译配置
    对应 App Store 的 Scheme 设置里, Run 和 Test 的 Build Configuration 都使用 Debug, Profile 和 Archive 使用 Release.
    对应 Staging (Beta) 的 Scheme 设置里, Run 和 Test 也用 Debug, Profile 和 Archive 使用 ForBeta.
  4. 不同的版本使用不同的icon
    接着就是 Icon. 现在大家应该都用 Xcode 5 了吧! 既然用了, 那就多用用新功能, Icon 设置这块我使用了 Media Assets. 如果你的老项目还没有启用, 那就麻烦你在对应 Target 的 General 下启用一下.
    在 Media Assets 中 (在项目中的默认名字应该是 Images.xcassets), 点击菜单 “Editor” -> “New App Icon”, 建立两个新的 App Icon, 分别对应 Debug 和 Staging 版本. 然后把之前准备好的图标分别拖进去. 如图:

    设置好 Media Assets 后, 还要在对应 Target 的 Build Settings 里分别设置不同版本使用不同的 App Icon. 如图:

    这样设置好, 不同版本的应用就拥有了各自不同的图标了.
  5. Bundle ID
    再下来就是按照我们前面定义的 Bundle ID 和各个版本的对应关系来进行设置了.
    我们需要在 Build Settings 中定义一个变量. 入口在: “Editor” -> “Add Build Setting” -> “Add User-Defined Setting”.

    然后在对应 Target 的 Info 里把 Bundle ID 设置为我们刚才定义的变量.

    这样, 项目在使用不同的配置文件编译的时候就能分别利用不同的 Bundle ID 了.
  6. appName
    设置了图标, 如果觉得有必要把应用名称也顺便区分一下的话, 也是可以的.
    我们需要在 Build Settings 中再定义一个变量. 比如我是这么定义的:

    然后在应用名称的设置那里使用这个变量:

到此为止,我们就可以选择不同的scheme进行编译不同的版本了,下面做持续集成

2. 安装Jenkins

因为 Jenkins 的pkg安装包默认安装位置为shared文件夹,需要权限修改,pod install 无法执行sudo命令,所以放弃pkg安装。

  1. 安装之前由于运行Jenkins时会自动寻找home路径,提前设置好JENKINS_HOME
    /etc/profile 添加一行
    export JENKINS_HOME="/Users/yourname/jenkins"

  2. 直接下载war包放到个人目录 /Users/yourname/jenkins
    使用命名
    java -jar jenkins.war --httpPort=8008 &
    source /etc/profile
    安装并运行

  3. 打开localhost:8008 进入到jenkins->系统管理->管理插件安装两个插件 cocoapod 和 xcode,一个是用来管理依赖库的,一个是进行xcode编译选项设置的


  4. 这里有一个选项 xcode schemes file,你可以选择填写你在项目利配置好的 xxxx-Beta 这样就可以打包不同版本的ipa了
    .ipa filename pattern ipa文件名称,写到跟jenkins项目名一样,便于区分,而且下面python脚本也会用到定位该文件
    target ->Configuration 这里可以根据配置写ForBeta ,Debug, Release

  5. 添加构建步骤 Execute Shell 进行单元测试
    先安装ocunit2junit插件,生成jenkins可见的测试报告,然后添加shell
    if [-d "test-reports"]
    then
    rm -rf test-reports
    fi
    xcodebuild test -workspace yourProject.xcworkspace -scheme yourscheme -sdk iphonesimulator | ocunit2junit

  6. 使用python脚本进行pgy上传和通知邮件发送
    添加构建步骤 Excute Shell
    python ${JENKINS_HOME}/workspace/pgyUpload/pgyDevUpload.py
    脚本 中可以做如下修改,进行不同的版本分辨上传道不同的pgy上
    if 'jenkins-MNCats-Dev' in jenkins_build_number:
    uKey = '开发key'
    _api_key = '开发api'
    projectName = '与你在jenkins中写的项目名称相同,例:xxx-Dev'
    print projectName
    pass
    if 'jenkins-MNCats-Alpha' in jenkins_build_number:
    uKey = 'alphakey'
    _api_key = 'alphaapi'
    projectName = '与你在jenkins中写的项目名称相同,例:xxx-Alpha'
    print projectName
    pass
    if 'jenkins-MNCats-AppStore' in jenkins_build_number:
    uKey = 'AppStore版本pgy key'
    _api_key = 'AppStore版本api key'
    projectName = '与你在jenkins中写的项目名称相同,例:xxx-AppStore'
    print projectName
    pass

    def get_ipa_file_path():
    ipa_file_workspace_path = '/Users/yourname/jenkins/workspace/'+projectName+'/build/'+projectName+'.ipa'
    if os.path.exists(ipa_file_workspace_path):
    return ipa_file_workspace_path

ok,到此位置我们基本达成了我们的目的,每天鼠标一点,就可以交版本下班了~

参考:
* http://www.jianshu.com/p/269d8d66472d
* http://nickcheng.com/post/unique-icons-for-your-app-in-different-state-in-xcode5-debug-release

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值