我有当前的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块,但它看起来非常非常难看,我想避免这种情况。如果添加新的包装器,它可能会成为一场噩梦。
答案 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
,并允许其他管道重复使用。