2017-06-28 1 views
1

Ich habe das aktuelle Stück Groovy (Jenkins DSL-Geschmack) und möchte die Wickelblöcke optional machen.Wie Bedingungsblöcke in groovy bedingt verwenden?

timestamps { 
     ansiColor('xterm') { 
      sh cmd 
     } 
    } 

Neue Funktionalität:

def use_timestamps = true // or false 
def use_ansiColor = false // or true 

/* some code to run the `sh cmd` with or without blocks */ 

PS. Ich weiß, dass ich mit zwei Sets von if-Blöcken arbeiten könnte, aber es wird sehr, sehr hässlich aussehen und ich möchte das vermeiden. Wenn ein neuer Wrapper hinzugefügt wird, könnte dies ein Alptraum werden.

Antwort

2

Es gibt keine generische Lösung, die für beliebige Wrapper funktioniert. Die if-Blöcke, die Sie erwähnen, werden in irgendeiner Form benötigt, um zu erreichen, was Sie wollen.

Sie können jedoch etwas verbessern, indem Sie die Bedingungen in Methoden machen.

def use_timestamps = true // or false 
def use_ansiColor = false // or true 


timestampsOptional(use_timestamps) { 
    ansiColorOptional(use_ansiColor, 'xterm') { 
     sh cmd 
    } 
} 

def timestampsOptional(active, Closure action) { 
    if (active) { 
     timestamps action 
    } else { 
     action() 
    }  
} 

def ansiColorOptional(active, encoding, Closure action) { 
    if (active) { 
     ansiColor(encoding) action 
    } else { 
     action() 
    }  
} 

Die Methoden dann in ein shared library bewegt werden können, die Hässlichkeit aus Ihrem Jenkinsfile zu halten und es ihnen ermöglicht, durch andere Pipelines wieder verwendet werden.