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

开启Server & Bots


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


Create Bots

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


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






注:Run tests in parallel 勾选之后,会并行执行test,如果选择的设备过多会导致系统卡到爆!并最终导致本次Integration失败。

###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


也可以在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 结果




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



##总结:

1:Integration 每次都会去拉取和更新代码仓库的最新代码,所以是以仓库代码为准,本地未提交的不生效。在路径~/Library/Caches/XCSBuilder/Bots下可以找到拉取的代码。 2:依赖于Scheme