如何在groovy中有条件地使用包装块?

时间:2017-06-28 19:48:14

标签: jenkins groovy jenkins-pipeline

我有当前的Groovy(Jenkins DSL风格),我想让包装块可选。

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。我知道我可以使用两组if块,但它看起来非常非常难看,我想避免这种情况。如果添加新的包装器,它可能会成为一场噩梦。

1 个答案:

答案 0 :(得分: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()
    }    
}

然后可以将这些方法移到shared library, 保持丑陋的Jenkinsfile,并允许其他管道重复使用。