先到Jenkins官网下载Jenkins应用,安装完成后在终端中执行jenkins
即可启动Jenkins服务,打开浏览器,输入http://localhost:8080打开Jenkins管理页面。(https://jenkins.io)
暂时忽略源码管理部分
构建触发器
如名,当达到条件时,触发Jenkins跑构建过程。我这里面选用的Poll SCM
这一项,这里面设置好构建时间后,会在对应时间触发Jenkins获取项目版本管理,查看是否有新提交的代码,若有,则获取最新代码,跑后续的构建过程,若无,则不做任何操作。如图1所示,项目会在八点去检查代码仓库是否有更新,然后在去做后续操作。
构建环境
这里面使用安装了一个插件去获取本次构建和上一次构建的版本变化,对应的时候在我的另一篇文章“获取Jenkins构建时Git Change Log”中有详细说明。下面给出对应配置的贴图(图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
网友评论