Jenkinsfile Groovy 闭包:参数的默认值为 null

Jenkinsfile Groovy closures: Default values for arguments coming up as null

提问人:Mo2 提问时间:7/13/2023 更新时间:7/13/2023 访问量:47

问:

我围绕 sh Jenkins 任务步骤创建了一个包装器闭包,以允许我捕获 stderr 并将其捕获并打印到日志中。

我的问题是布尔参数的默认值总是以 ,除非我明确传入 or .nulltruefalse

这是我如何调用它的示例(请注意,这是一个闭包,它只是构建一个命令来运行 pytest 并返回一个 String):pytest

def sh_stdout = sh_wrap(pytest("some args to a closure called pytest", "more args"))

以下是包装器的片段:sh

sh_wrap = { String cmd, Boolean print_to_log = true, Boolean capture_stdout = true, Boolean capture_stderr = false ->
    echo "cmd ${cmd}"
    echo "print_to_log ${print_to_log}"
    echo "capture_stdout ${capture_stdout}"
    echo "capture_stderr ${capture_stderr}"
    if(capture_stderr) {
        cmd += ' 2>&1'
    }
    sh_stdout = sh(script: cmd, returnStdout: capture_stdout)
    if(print_to_log) {
        echo sh_stdout
    }
    return sh_stdout
}
Jenkins Groovy 关闭 Jenkins-Groovy

评论

0赞 Matthew Schuchard 7/13/2023
在这里,您可能会从 Jenkins 共享库全局 var 方法中受益。它将解决您的问题,因为它允许在输入参数中指定默认值。
0赞 Mo2 7/13/2023
@MattSchuchard感谢您的回复。问题是否与参数变量的范围有关?你会碰巧有一些例子或一个 toturial 链接吗?我对 Groovy 很陌生,但有 Java 和 Python 方面的经验。
0赞 Matthew Schuchard 7/13/2023
Doc 提供了有关使用默认参数值定义方法的更多信息:jenkins.io/doc/book/pipeline/shared-libraries/...
0赞 Mo2 7/14/2023
@MattSchuchard我明白了。谢谢你。我想知道为什么在文档的这一部分介绍默认值时没有提到默认值仅在共享库中起作用的警告:groovy-lang.org/closures.html#_normal_parameters

答: 暂无答案