2013-01-08 14 views
5

Birkaç adımda bir buildbot derleme fabrikam var. Adımlardan biri düzenli aralıklarla buildbot'un bir istisna atmasına ve çıkmasına neden oluyor. Ancak, bu durumda bile, oluşturulan günlükleri saklamak istiyorum. Bir seçenek, yalnızca önceki adım zaman aşımına uğradığında çalışan bir adım eklemek olabilir. doStepIf kullanmak mümkündür. Ancak, durumu TIMEOUT olarak görmenin bir yolu yoktur, sadece SUCCESS, WARNINGS, FAILURE, or SKIPPED vardır. Bu sorunu çözmenin en iyi yolu nedir?Önceki zaman aşımına uğradıysa koşullu adım nasıl çalıştırılır

doStepIf fonksiyonunun BİR örnek: Burada

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] 
+0

'DurtOnFailure' öznitelik değeriniz adımınıza geçti mi? True olarak ayarlanmışsa, "alwaysRun" özniteliği True olarak ayarlanmadıkça başka adımlar (ör. Günlükler depolama) atlanır. Ayrıntılar için http://docs.buildbot.net/latest/manual/cfg-buildsteps.html?highlight=haltonfailure#common-parameters adresini ziyaret edin. – rutsky

cevap

0

kısmi çözüm:

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

ben biraz farklı bir metodoloji ( link) bazı örnekler gördük, ama bu çok çalışması gerekir.

getSteps()tüm adımların bir listesini döndürür. Sadece hangisinin koştuğunu bulmaya ihtiyacın var.

Not: Bu kod, kısmi çözümdür, çünkü komut dosyası bir şey yazdırdıysa çalışmaz. Sadece no çıktı varsa çalışacaktır.

İlgili konular