2017-06-28 5 views
1

私は現在のGroovy(Jenkins DSL flavor)を持っており、ラッピング・ブロックをオプションにしたいと考えています。groovyでラッピング・ブロックを条件付きで使用する方法は?

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

新機能:

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

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

PS。私はそれが2つのセットのifブロックで動作するようにすることができることを知っていますが、それは非常に非常に醜いと思われ、私はそれを避けたいと思います。新しいラッパーが追加された場合、それは悪夢になる可能性があります。

答えて

2

任意のラッパーで動作する一般的なソリューションはありません。あなたが言いたいifブロックは、あなたが望むものを達成するために何らかの形で必要となります。

ただし、条件をメソッドにすることで、問題をある程度改善できます。

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() 
    }  
} 

の方法は、あなたのJenkinsfileのうちの醜さを維持し、それらを他のパイプラインで再利用できるようにすることshared library、 に移動させることができました。

関連する問題