【问题标题】:How to get default value from groovy script variable in jenkins pipeline job如何从jenkins管道作业中的groovy脚本变量中获取默认值
【发布时间】:2016-11-03 18:06:45
【问题描述】:

所以问题是,如果不调用 setControllerIP,我无法使用 getControllerIP 方法获取控制器 IP 变量的默认值。我在本地尝试了类似的 groovy 代码,它可以工作,但不能在我的 jenkins 服务器上工作。还在我的 groovy 脚本中尝试了许多其他组合,但没有任何效果。 请注意,我们使用的是 Jenkins:管道共享 groovy 库插件。

这是我在 Jenkins 上的管道工作:

node{    

    def controllerParameters = new com.company.project.controller.DeploymentParameters() as Object

    controllerParameters.setOSUsername('jenkins')
    controllerParameters.setOSPassword('jenkins123')
    controllerParameters.setBuildNumber(33)
    //controllerParameters.setControllerIP('192.44.44.44')
    //if I uncomment above line everything works fine but I need to get default value in a case

    echo "I want the default value from other file"
    controllerParameters.getControllerIP()
    echo "my code hangs on above line"

}

这是我的另一个文件 ../controller/DeploymentParameters.groovy

package com.company.project.controller
import groovy.transform.Field

def String osUsername
def String osPassword
@Field String controllerIP = "NotCreated"  //tried few combinations

//Open Stack username
def String setOSUsername(String osUsername) {
    this.osUsername = osUsername
}
def String getOSUsername() {
    return this.osUsername
}
//Open Stack password
void setOSPassword(String osPassword) {
    this.osPassword = osPassword
}
def String getOSPassword() {
    return this.osPassword
}

//Open Stack floating ip of master vm
void setControllerIP(String controllerIP) {
    this.controllerIP = controllerIP
}

def String getControllerIP() {
    return this.controllerIP
}

【问题讨论】:

    标签: jenkins groovy


    【解决方案1】:

    当 groovy 执行像 this.osUsername = osUsernamereturn this.osUsername 这样的行时,它实际上调用 getter 和 setter,而不是直接访问字段。

    所以这个:

    def String getOSPassword() {
        return this.osPassword
    }
    

    行为如下:

    def String getOSPassword() {
        return this.getOsPassword()
    }
    

    你的代码进入了无限递归(setter 和 assignment 一样)。

    在您的 setter 和 getter 中,您需要使用 Groovy direct field access operator

    def String getOSPassword() {
        return this.@osPassword
    }
    

    【讨论】:

    • 谢谢它的工作,它困扰了我很长一段时间:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多