4

私たちの開発チームは、常に iOS ビルドに Jenkins を使用しており、Philips Hue ライトを使用して、ビルドがビルド (黄色)、成功 (緑色)、失敗 (赤色) のときにチームに通知しています。

今はXcode CI と Botsに移行しましたが、単体テストがいつ失敗するかわかりません。ビルド フェーズが失敗したかどうかさえわかりません。

Xcode Bots CI では、この「大画面」機能を利用できます。Apple の「Manage and Monitor Bots from a Web Browser」Docsでは、色相ライトをキーアップできるあらゆる種類の状態があることがわかります。

何かをハックして HTML ページを解析したくありません。楽しい作業ですが、Apple が HTML マークアップを更新すると、作業は長くは続きません。

Xcode ボットが統合を完了したときに生成される解析可能なファイルはありますか?

色相を表示してもらいたいです:
* 分析警告の場合は青
* ビルド警告の場合はオレンジ
* ビルド エラーの場合は赤
* ビルド実行中の場合は黄色

4

3 に答える 3

6

チームのソリューションを共有したいと思います。ボットの結果が保存されている場所を見つけ、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

ああ、私の時々の恋人よ、もう一度助けに来てください。

また、Xcode の XML プロパティ リスト ファイルを解析するために Plist Buddy を使用していることにも注意してください。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
  • エラーカウント
  • 警告カウントオレンジ
  • TestsFailedCount

上記のいずれかのカウントを取得すると、点滅する色が変化します。たとえば、次の例では、色相から明るい青が生成されます。 ここに画像の説明を入力

于 2014-03-15T04:34:55.857 に答える
4

これらの回答の後にここを見ている人にとっては、buildService.logファイルのスクレイピングは必要ありません (実際には、トリガーの実行に関連してログが作成される鶏/卵の問題のために機能しません)。トリガー スクリプトでコマンド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
于 2014-12-10T22:23:04.370 に答える
4

OS X Server 4.0 の結果パスは次のようになります。

/ライブラリ/開発者/XcodeServer/IntegrationAssets/Your_Bot/

  • アーカイブ.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;
}
于 2014-11-19T09:48:57.997 に答える