Xcode Bots 将它们的结果放在哪里,以便我可以解析它们?

Posted

技术标签:

【中文标题】Xcode Bots 将它们的结果放在哪里,以便我可以解析它们?【英文标题】:Where do Xcode Bots put their results, so I can parse them? 【发布时间】:2014-04-20 14:13:00 【问题描述】:

我们的开发团队一直使用 Jenkins 进行 ios 构建,并在构建(黄色)、成功(绿色)、失败(红色)时使用飞利浦 Hue 灯通知团队。

现在我们已经搬到Xcode CI and Bots,我不知道什么时候有单元测试失败了。我们甚至不知道构建阶段是否失败。

在 Xcode Bots CI 上,您可以获得这个“大屏幕”功能: 在 Apple 的 "Manage and Monitor Bots from a Web Browser" Docs 中,您可以看到它具有各种可以键控色调光的状态。

我真的不想破解某些东西并解析 html 页面。虽然很有趣,但如果 Apple 更新他们的 HTML 标记,这项工作不会持续很长时间。

当 Xcode 机器人完成集成时,是否会生成一个可解析的文件?

我很想显示色相: * 蓝色表示分析警告 * 橙色表示构建警告 * 红色表示构建错误 * 黄色表示构建运行

【问题讨论】:

【参考方案1】:

我想分享团队的解决方案。我们找到了存储 Bot 结果的位置,我们使用 bash 对其进行解析,并通过 curl 系统调用向 HUE 灯发送消息。我们在构建脚本前后调用方案中的脚本。

我们在以下位置解析机器人的结果 plist:

/Library/Server/Xcode/Data/BotRuns/Latest/output/xcodebuild_result.bundle/Info.plist

在那里你可以找到各种很酷的数据来使用!:

<dict>
    <key>AnalyzerWarningCount</key>
    <integer>0</integer>
    <key>AnalyzerWarningSummaries</key>
    <array/>
    <key>ErrorCount</key>
    <integer>0</integer>
    <key>ErrorSummaries</key>
    <array/>
    <key>LogIdentifier</key>
    <string>705bffcb-7453-49ba-882f-80e1218b59cf</string>
    <key>LogPath</key>
    <string>1_Test/action.xcactivitylog</string>
    <key>Status</key>
    <string>IDEActionResultStatus_Succeeded</string>
    <key>TestFailureSummaries</key>
    <array/>
    <key>TestSummaryIdentifier</key>
    <string>a1554874-4d40-4e94-ae89-a73184ec97a9</string>
    <key>TestSummaryPath</key>
    <string>1_Test/action_TestSummaries.plist</string>
    <key>TestsCount</key>
    <integer>185</integer>
    <key>TestsFailedCount</key>
    <integer>0</integer>
    <key>WarningCount</key>
    <integer>0</integer>
    <key>WarningSummaries</key>
    <array/>
<dict>
AnalyzerWarningCount 错误计数 警告计数 TestsFailedCount

哦 bash,我有时的情人,再来拯救一天。

还要注意使用 Plist Buddy 来解析 Xcode 的 XML 属性列表文件。从 plist 文件中获取信息的首选。

    #!/bin/bash
    #
    #   By Phil
    #
    exec > /tmp/my_log_file.txt 2>&1
    TEST_RESULT_PLIST="/Library/Server/Xcode/Data/BotRuns/Latest/output/xcodebuild_result.bundle/Info.plist"

    hue_light_green=false

    echo "testResultParse_OwlHue"

    #If not bot, return
    if [ "$(whoami)" != "_teamsserver" ]; then
        echo "$(whoami) - Not a bot!";
        exit 1
    fi

    #1 If file not found ERROR
    if [ ! -f $TEST_RESULT_PLIST ]; then
        curl -X PUT -d "\"on\":true,\"bri\":32,\"effect\":\"none\",\"hue\":150,\"sat\":255,\"alert\":\"lselect\"" ipaddress/api/testestest/lights/3/state
        echo "Test Result Plist not Found";
        exit 1
    fi

    #2 AnalyzerWarningCount BLUE
    AnalyzerWarningCount=$(/usr/libexec/PlistBuddy -c "Print :AnalyzerWarningCount" "$TEST_RESULT_PLIST")
    if [ $AnalyzerWarningCount != 0 ]; then
        echo "AnalyzerWarningCount";
        curl -X PUT -d "\"on\":true,\"bri\":32,\"xy\":[0.16, 0.1],\"hue\":15815,\"sat\":255,\"effect\":\"none\",\"alert\":\"lselect\"" ipaddress/api/testestest/lights/3/state
    fi

    #3 WarningCount
    WarningCount=$(/usr/libexec/PlistBuddy -c "Print :WarningCount" "$TEST_RESULT_PLIST")
    if [ $WarningCount != 0 ]; then
        curl -X PUT -d "\"on\":true,\"bri\":32,\"xy\":[0.58, 0.41],\"hue\":15815,\"sat\":255,\"effect\":\"none\",\"alert\":\"lselect\"" ipaddress/api/testestest/lights/3/state
        echo "WarningCount";
    fi

    #4 ErrorCount || TestsFailedCount ERROR
    ErrorCount=$(/usr/libexec/PlistBuddy -c "Print :ErrorCount" "$TEST_RESULT_PLIST")
    if [ $ErrorCount != 0 ]; then
        curl -X PUT -d "\"on\":true,\"bri\":32,\"effect\":\"none\",\"hue\":150,\"sat\":255,\"alert\":\"lselect\"" ipaddress/api/testestest/lights/3/state
        echo "ErrorCount";
        exit 1
    fi

    #5 TestsFailedCount ERROR
    ErrorCount=$(/usr/libexec/PlistBuddy -c "Print :ErrorCount" "$TEST_RESULT_PLIST")
    if [ $TestsFailedCount != 0 ]; then
        curl -X PUT -d "\"on\":true,\"bri\":32,\"effect\":\"none\",\"hue\":150,\"sat\":255,\"alert\":\"lselect\"" ipaddress/api/testestest/lights/3/state
        echo "TestsFailedCount";
        exit 1
    fi

    #6 None of the above.  SUCCESS
    if [ "$hue_light_green" = true ] ; then
        echo "SUCCESS";
        curl -X PUT -d "\"on\":true,\"bri\":32,\"effect\":\"none\",\"hue\":25500,\"sat\":255,\"alert\":\"lselect\"" ipaddress/api/testestest/lights/3/state
    fi
AnalyzerWarningCount 蓝色 错误计数红色 WarningCount 橙色 TestsFailedCount 红色

现在,当我们对上述任何一项进行计数时,我们会看到闪烁的颜色变化。例如,下面的代码会从我们的色调中产生明亮的蓝色:

【讨论】:

在 OS X 10.10 Yosemite 中结果 plist 文件的位置是否已更改?我什至在 /Library/Server/Xcode 上都没有文件夹。 服务器已移至/Library/Developer/XcodeServer/,但我没有看到类似BotRuns/Latest 的内容...【参考方案2】:

OS X Server 4.0 的结果路径似乎是:

/Library/Developer/XcodeServer/IntegrationAssets/Your_Bot/

Archive.xcarchive.zip build.log buildService.log Your_Bot.ipa sourceControl.log xcodebuild_result.bundle.zip

xcodebuild_result.bundle 现在是一个 zip 文件,我从 buildService.log 解析构建结果:

Build results summary: 
analyzerWarningChange = 14;
analyzerWarningCount = 14;
errorChange = 0;
errorCount = 0;
improvedPerfTestCount = 0;
regressedPerfTestCount = 0;
testFailureChange = 0;
testFailureCount = 0;
testsChange = 0;
testsCount = 0;
warningChange = 20;
warningCount = 20;

【讨论】:

为我工作,谢谢。您知道在哪里可以找到每个测试的详细输出吗?【参考方案3】:

对于在此处查看这些答案的任何人来说,对 buildService.log 文件的抓取是不必要的(实际上什至不会工作,因为相对于运行触发器而言,何时创建日志的鸡/蛋问题)。尝试在 Trigger Script 中运行命令env,您会看到 Xcode 实际上会根据测试结果设置环境变量,其中一些比较值得注意的是:

XCS_BOT_NAME=My New Bot
XCS_WARNING_CHANGE=0
XCS_INTEGRATION_RESULT=succeeded
XCS_TEST_FAILURE_COUNT=0
XCS_TEST_FAILURE_CHANGE=0
XCS_ERROR_COUNT=0
XCS_ANALYZER_WARNING_COUNT=0
XCS_TESTS_CHANGE=0
XPC_SERVICE_NAME=0
XCS_ERROR_CHANGE=0
XCS_WARNING_COUNT=0
XCS_TESTS_COUNT=3
XCS_INTEGRATION_NUMBER=1

【讨论】:

以上是关于Xcode Bots 将它们的结果放在哪里,以便我可以解析它们?的主要内容,如果未能解决你的问题,请参考以下文章

我应该将敏感文件放在哪里,以便 PHP 脚本可以读取它们?

Xcode Server Bots 未运行测试

在哪里放置应用程序以便无论工作目录如何我都可以使用它们?

Xcode Bots 不会将 git 子模块更新为指定的提交

将 Cron 作业存储在哪里,它们会一直运行吗?

xcode bots 编辑失败