6

私はいくつかのステップを持つbuildbotビルドファクトリーを持っています。ステップの 1 つが定期的にタイムアウトし、buildbot が例外をスローして終了します。ただし、この場合でも、生成されたログを保存できるようにしたいと考えています。1 つのオプションは、前のステップがタイムアウトした場合にのみ実行されるステップを追加することです。使用doStepIf可能です。ただし、あるTIMEOUTだけなのでステータスを見る方法はありませんSUCCESS, WARNINGS, FAILURE, or SKIPPED。この問題を解決する最善の方法は何ですか?

関数の例doStepIf:

from buildbot.status.builder import Results, SUCCESS

def doStepIf(step):
    allSteps = step.build.getStatus().getSteps()
    lastStep = allSteps[-1]
    rc = lastStep.getResults()[0] # returns a tuple of (rc, string)
    # if the rc == SUCCESS then don't continue, since we don't want to run this step
    return Results[rc] == Results[SUCCESS]
4

1 に答える 1

0

部分的な解決策は次のとおりです。

##-----------------------------------------------------------------------------
# Run checker for the timeout condition.
# It will return True if the last step timed out.
def if_tmo(step):
    allSteps = step.build.getStatus().getSteps()
    lastStep = allSteps[0]
    for bldStep in allSteps:
        if (bldStep.isFinished() == True):
            (result, strings) = bldStep.getResults()       # returns a tuple of (rc, string)
            lastStep = bldStep
        else:
            # this step didn't run yet. The one before is the last one
            break;

    # In the timed out step the log is either empty or has the proper string
    logText = lastStep.getLogs()[0].getText()
    timedOutStep = False
    if (len(logText) == 0 or (logText.find("command timed out") != -1)):
        timedOutStep = True

    return (timedOutStep)

少し異なる方法論 (リンク) の例をいくつか見ましたが、これも機能するはずです。

getSteps()すべてのステップのリストを返します。すでに実行されているものを見つける必要があります。

注: このコードは部分的な解決策です。スクリプトが何かを出力すると機能しないためです。出力がまったくない場合にのみ機能します。

于 2013-01-11T20:51:37.313 に答える