如何在 Jenkins 声明性管道“选项”块中使用条件?

Adr*_*enW 3 continuous-integration jenkins jenkins-pipeline jenkins-declarative-pipeline

我想buildDiscarder根据全局变量进行不同的配置。目前我有

options {
    buildDiscarder(logRotator(numToKeepStr: '5'))
}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找类似的东西

// BROKEN
options {
    if ("${SOME_VAR}" == 'some_val') {
        buildDiscarder(logRotator(numToKeepStr: '5'))
    } else {
        buildDiscarder(logRotator(daysToKeepStr: '7'))
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在 Jenkins 声明式管道中实现这种行为吗?我认为我不能在这里使用script//whenexpression,或者至少当我尝试时它不起作用。

我偶然发现的不起作用的来源/想法:1 , 2 , 3 , 4 , 5 , 6

Mar*_*atC 5

尝试这个:

options {
    buildDiscarder(logRotator(numToKeepStr: ("${SOME_VAR}" == 'some_val') ? '5' : '7'))
}
Run Code Online (Sandbox Code Playgroud)

如果您想使用不同的参数,只需将“未使用”的参数设置为'-1'

options {
    buildDiscarder(logRotator(
            numToKeepStr: ("${SOME_VAR}" == 'some_val') ? '5' : '-1',
            daysToKeepStr: ("${SOME_VAR}" == 'some_val') ? '-1' : '7'
    ))
}
Run Code Online (Sandbox Code Playgroud)