美文网首页
iOS基于Jenkins持续集成

iOS基于Jenkins持续集成

作者: KrisMarko | 来源:发表于2019-08-26 17:16 被阅读0次

    先到Jenkins官网下载Jenkins应用,安装完成后在终端中执行jenkins即可启动Jenkins服务,打开浏览器,输入http://localhost:8080打开Jenkins管理页面。(https://jenkins.io

    暂时忽略源码管理部分

    构建触发器

    如名,当达到条件时,触发Jenkins跑构建过程。我这里面选用的Poll SCM这一项,这里面设置好构建时间后,会在对应时间触发Jenkins获取项目版本管理,查看是否有新提交的代码,若有,则获取最新代码,跑后续的构建过程,若无,则不做任何操作。如图1所示,项目会在八点去检查代码仓库是否有更新,然后在去做后续操作。

    图1

    构建环境

    这里面使用安装了一个插件去获取本次构建和上一次构建的版本变化,对应的时候在我的另一篇文章“获取Jenkins构建时Git Change Log”中有详细说明。下面给出对应配置的贴图(图2)。

    图2

    构建

    构建过程我选择自己写命令行脚本去执行Archive以及Export,点击配置->构建->增加构建步骤、选择Execute shell。我们这里使用Xcode默认安装的命令行工具xcodebuild,本文主要说如何搭建持续继承环境,对xcodebuild工具不做多冗述,只会写出最基本的使用。但还是建议读者对这个工具去做更多了解。另外,因我们项目工程使用了CocoaPods去管理依赖,项目中使用xcworkspace,下面写出的命令行是以此为前提。

    清理上次编译构建的缓存

    xcodebuild clean -workspace DTSClassRoom.xcworkspace -scheme DTSClassRoom
    
    • 项目编译构建每次会产生大量的编译后文件,所以我们在Archive之前,先将之前的构建做Clean操作。下面命令行中,读者需要将DTSClassRoom.xcworkspace以及DTSClassRoom替换成自己项目中使用的。
    • 如果是workspace就用-workspace,就像编译带有CocoaPods的项目,如果是普通项目则用-project

    编译打包成Archive文件

    build_time=`date +%F-%H:%M:%S`
    build_date=`date +%F`
    xcodebuild archive -workspace DTSClassRoom.xcworkspace \
                       -scheme DTSClassRoom \
                       -configuration AdHoc \
                       -archivePath /Users/macmini/Desktop/dtc_ios/archive_collect/${build_date}/${build_time}/archive_jenkins
    
    • DTSClassRoom.xcworkspace"以及DTSClassRoom替换成自己项目中使用的,-configuration参数是选择build的环境,例-configuration AdHoc-archivePath参数设置Archive后xxx.xcarchive文件的存放路径。
    • 我们这里获取了日期和时间,将每次Archive输出的包按照日期/时间存放
    • 如果是workspace就用-workspace,就像编译带有CocoaPods的项目,如果是普通项目则用-project

    将Archive文件导出生成.ipa包

    xcodebuild -exportArchive -exportOptionsPlist /Users/macmini/Desktop/dtc_ios/exportOptionPlists/ExportOptions.plist \
                              -archivePath /Users/macmini/Desktop/dtc_ios/archive_collect/${build_date}/${build_time}/archive_jenkins.xcarchive \
                              -exportPath /Users/macmini/Desktop/dtc_ios/dual_teacher_ipas/dual_teacher_jenkins_ipa
    

    上传到蒲公英

    我们在配置->增加构建后操作->Execute Scripts->Add post build step->add build step->Execute Scripts。(如图3)

    • command中写上传蒲公英脚本,如下:
    curl -F "file=@/Users/macmini/Desktop/dtc_ios/dual_teacher_ipas/dual_teacher_jenkins_ipa/DTSClassRoom.ipa" \
         -F "uKey=蒲公英文档中找到自己的uKey" \
         -F "_api_key=蒲公英文档中找到自己的ApiKey" \
         -F "$(printf "updateDescription=${SCM_CHANGELOG}")" \
         https://qiniu-storage.pgyer.com/apiv1/app/upload
    
    • 这里需要解释一下SCM_CHANGELOG这个变量,是我们在构建时设置的,通过插件获取到的Git Change Log的信息,这里我们将这个信息同步更新到蒲公英。(另外文章最后有一个小坑也是关于这里的)
    • If build was中选择SUCCESS。

    小坑

    因为我们是用curl命令将包上传,-F中的参数需要先通过解释器解释。例如我们SCM_CHANGELOG变量为字串"fixbug\n bug",如果以如下写法作为参数直接给curl上传,会在蒲公英应用更新说明处如图4显示,并不会按照我们预想的那样换行。网上也有一个人遇到同样的问题,他作出了更详细的解释,http://www.it1352.com/589450.html

    -F "updateDescription=${SCM_CHANGELOG}"
    
    图4

    相关文章

      网友评论

          本文标题:iOS基于Jenkins持续集成

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