Groovy将装箱的类型传递给Jenkins,如何取消装箱?

时间:2019-06-13 02:13:25

标签: java jenkins groovy jenkins-pipeline

我正在尝试编写一个Jenkins管道,如果没有作业在运行,它将每周一次重新启动Jenkins。由于我不想长时间阻塞正在运行的作业,因此我尝试使用timeout参数调用doQuietDown

https://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html#doQuietDown-boolean-int-

这就是我要尝试的:

        stage('Quiet Down') {
            steps {
                script {
                    boolean doBlock = true
                    int timeout_ms = 30000
                    Jenkins.doQuietDown(doBlock, timeout_ms)
                }
            }
        }

那失败了:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: static jenkins.model.Jenkins.doQuietDown() is applicable for argument types: (java.lang.Boolean, java.lang.Integer) values: [true, 30000]
Possible solutions: doQuietDown(boolean, int), doQuietDown()
    at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1501)
    at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1487)

因此groovy正在传递盒装类型,但Jenkins希望使用非盒装类型。我尝试使用booleanValue()intValue()(不带变量)对未装箱的类型true30000进行类型转换,但这对错误消息没有影响。

我也尝试过Jenkins.doQuietDown block: doBlock, timeout: timeout_ms,但它通过了LinkedHashMap

jenkins.model.Jenkins.doQuietDown() is applicable for argument types: (java.util.LinkedHashMap) values: [[block:true, timeout:30000]]

我正在使用Jenkins 2.180(本文发布时的当前版本)

1 个答案:

答案 0 :(得分:2)

这不是静态方法。您称其为静态。

您必须执行类似Jenkins.get().doQuietDown(...)的操作。

装箱/拆箱-Groovy自动执行。