这几天项目上的事情不多,公司有频繁打包的需求。刚好分配给我的mini闲置,之前了解过持续集成的工具Jenkins,安装过几次都以失败而告终。突然想起了Server有Xcode支持,最初玩Server的时候以为它仅仅为Xcode提供代码仓库,后面才了解到它是用来做持续集成的。 首先,Xcode的版本是9.4.1,Xcode9以下的要配合Server使用,具体方案我没有去了解。 利用持续集成我们可以很容易获得ipa文件,非开发人员也能做到,甚至可以自动上传到蒲公英或fir分发平台上去,只要将相关的配置设置好,只需要一键就能完成打包上传的操作。 ## 准备 首先开启Xcode的Server&Bot,开启Xcode的Server&Bot功能需要指定一个用户,不建议直接使用管理员用户。  到Xcode的设置里找到最后一项Server&Bot,点击开关打开就可以了,十分简单。当然,还需要修改Integrate timeout,默认是10分钟,但如果项目很大10分钟不能完成打包就会终止,故视需要修改超时时间,我设置的是30分钟。 到这里服务器部分就完成了。 ## 使用 ### 连接服务器 服务器配置好之后就可以配置客户端了。 首先添加刚刚在服务器那边的那个用户,在Xcode的设置->Accounts里添加用户,选择Xcode Server,如果在server列表里没有那就用ip连接(不建议,如果两台电脑在同一个网段的局域网里一定会在列表里找到)。!   然后就能在如图的位置找到服务器了。  到这一步客户端已经连上服务器了,现在就需要将项目加入到server里面去了。 ### 添加项目 在添加项目之前请确认项目参库是git的,我没有尝试添加svn管理的项目。 入口在Product,也可以右击服务器,然后选择Create Bot进入下面的界面:  这个名字与项目没有任何关系,可以随意修改。点击next验证仓库并设置分支。  然后点击next,设置打包相关的配置,如果要导出企业包请在export选择自定义的pilst文件,plist文件可以先打一个包导出企业包获得。   然后就是证书的配置:  接下来就一直下一步直到完成。 到这里一个简单的持续集成项目就配置好了。 ### 添加集成前后的脚本 用持续集成就不能每次打包之前都修改构建号然后推送到服务器上了,这个时候就用到脚本了。 Xcode Server可以在开始之前以及构建完成后执行自定义的脚本,在集成之前修改info.plist文件里的构建号就能实现每次打包的构建号都不一样的功能了,至于构建号的组成规则就看心情了。我选择的构建号组成规则是<版本号.月日_第几次构建>。  pre···脚本是在构建之前执行,post···是在构建完成后执行。图中的脚本就是用来修改构建号的。!  这是在构建完成后上传到fir服务器上去的脚本。 整个持续集成就这些内容了,接下了就脚本的内容简单分析。 ## 脚本简单说明 Post-Integration Scripts 时可用的CI Script Variables对照表 | Variable | Type | Description | Example | | --------------------------- | ------ | :------------------------------------------------- | :----------------------------------------------------------- | | XCS_BOT_NAME | String | The name of this bot | MyApp Bot | | XCS | Number | ? | 1 | | XCS_SOURCE_DIR | Path | 到这个集成的源目录的路径 | /Library/Developer/XcodeServer/Integrations/Caches/$XCS_BOT_ID/Source | | XCS_INTEGRATION_RESULT | String | 这个集成的结果 | succeeded | | XCS_TEST_FAILURE_COUNT | Number | 在这个集成中测试失败的次数 | 0 | | XCS_INTEGRATION_ID | String | 该集成的ID | 2 | | XCS_BOT_TINY_ID | String | 这个机器人的短ID | BA7B030 | | XCS_ARCHIVE | Path | 通过此集成生成的归档的路径 | /Library/Developer/XcodeServer/Integrations/Integration-$XCS_INTEGRATION_ID/Archive.xcarchive | | XCS_TEST_FAILURE_CHANGE | Number | 在此与之前的集成之间,测试失败的数量发生的变化数 | 0 | | XCS_INTEGRATION_TINY_ID | String | 该集成的短ID | 847C2A7 | | XCS_BOT_ID | String | 这个bot的ID | 4faee640aba92fc40c53c58c0a5ccadd | | XCS_XCODEBUILD_LOG | Path | 构建日志的路径 | /Library/Developer/XcodeServer/Integrations/Integration-$XCS_INTEGRATION_ID/build.log | | XCS_PRODUCT | String | 构建产品的名称 | MyApp.ipa | | XCS_ERROR_COUNT | Number | 这个集成中的错误数量 | 0 | | XCS_ANALYZER_WARNING_COUNT | Number | 在这个集成中静态分析警告的数量 | 0 | | XCS_TESTS_CHANGE | Number | 此次与之前集成的测试次数的变化数 | 0 | | XCS_ERROR_CHANGE | Number | 在此与之前的集成之间的错误量的变化数 | 0 | | XCS_ANALYZER_WARNING_CHANGE | Number | 静态分析仪警告的数量在此与之前的集成之间发生变化数 | 0 | | XCS_WARNING_COUNT | Number | 这个整合的警告数 | 0 | | XCS_TESTS_COUNT | Number | 这个整合的测试次数 | 2 | | XCS_OUTPUT_DIR | Path | 建立输出目录。集成完成后,该目录将被删除。 | /Library/Developer/XcodeServer/Integrations/Integration-$XCS_INTEGRATION_ID | | XCS_INTEGRATION_NUMBER | Number | 这个集成在该bot下的编号 | 2 | 表格来自:https://juejin.im/post/5a3270a1f265da430c11d825 ### 修改构建号的脚本 ```shell #!/bin/sh #set 可以打印所有的可用的CI Script Variables,在日志文件中查看 #获取plist文件路径 info_path=${XCS_SOURCE_DIR}"/**/Info.plist" #获取时间 build_number=$(date +%Y%m%d) #拼接构建号 build_number=$build_number"."${XCS_INTEGRATION_NUMBER} #获取版本号 version_number=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $info_path) #修改构建号 /usr/libexec/PlistBuddy -c "Set CFBundleVersion ${build_number}" $info_path #修改版本号 /usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString ${version_number}" $info_path ``` ### 上传到fir ```shell #!/bin/sh ipa_path=${XCS_PRODUCT} #获取ipa包的路径,在网上找的文章说这个路径拿不到ipa,但是我使用的时候就只有这个路径拿到了ipa。 echo $ipa_path /usr/local/bin/fir login `apitoken` #登录fir,如果已经在终端执行过这一条命令,且只有一个fir账号,这一行可以不要。 /usr/local/bin/fir publish $ipa_path #上传到fir ``` > fir-cli可以用gem安装,具体方法见:https://github.com/FIRHQ/fir-cli/blob/master/doc/install.md
没有评论