前言: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