Xcode9 之 Xcode Server 持续集成

前言:Xcode9之前使用Xcode Server 步骤比较繁琐,还需要单独的macOS Server app,Xcode9之后preferences新增了Server & Bots 选项, 将Xcode Server内置在了Xcode中。
下面将介绍在Xcode9中如何设置和使用Xcode Server。

开启Server & Bots

选择设置Xcode Server的用户,我选择的是自己,也可以选择其他用户。

设置过程loading

Create Bots

为什么不能创建Bot ??因为需要在服务器建立代码仓库,否则不能创建,会出现以下提示

可以创建macOS和iOS的APP,这里只介绍iOS,代码使用Git做版本控制。
选择Product-> Create Bot开始创建。
给Bot取个名字

Sign In 需要trust, 使用SSH即可

Scheme Actions - Analyse, Test, Archive
Configurations 设置




Triggers

Triggers

一:Pre-Integration Scripts: 设置在构建之前执行的Script(在代码checkout/update执行完,构建开始前执行)。
二:Post-Integration Scripts: 设置在构建完成之后执行的Script,Integration失败则不会触发,可以选择在什么结果下执行,见图Run On项,这个Script在执行时可以获取到执行后的结果,可查看下面这张对照表。
三:Email Notifications :发送邮件通知类型有两种
1:New Issue Email ,当出现issue,waring 时,可以给提交者发送邮件通知告知详细情况。
2:Periodic Email Report

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



这表格有点奇怪。。。。。 点击查看Apple更详细的介绍
也可以在environment variables 中添加自定义变量。

路径 /Library/Developer/XcodeServer/IntegrationAssets/${XCS_BOT_ID}-${XCS_BOT_NAME}/ 是存储bot结果的路径
值得注意: 在 Trigger 里操作路径
/Library/Developer/XcodeServer/IntegrationAssets/${XCS_BOT_ID}-${XCS_BOT_NAME}/${XCS_INTEGRATION_NUMBER}
无效,因为该路径在trigger跑完之后才由upload统一生成,从loading过程可以看到。

整个过程Gif

Integration 结果

集成概要

结果Log

/Library/Developer/XcodeServer/IntegrationAssets/$XCS_BOT_ID-$XCS_BOT_NAME/$XCS_INTEGRATION_NUMBER/ 该路径中的是integration的结果集合。在XcodeServer Website中Download下来的就是该目录压缩包。有的时候可能要对结果进行后续分析
Xcode Server Website

总结:

1:Integration 每次都会去拉取和更新代码仓库的最新代码,所以是以仓库代码为准,本地未提交的不生效。在路径~/Library/Caches/XCSBuilder/Bots下可以找到拉取的代码。
2:依赖于Scheme
3:终端启动integration —> 执行 curl -k -X POST -u “username:password” “https://XCS_IP:20343/api/bots/BOT_ID/integrations" -i