如何从jenkins管道作业

时间:2016-11-03 18:06:45

标签: jenkins groovy

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

这是我在詹金斯的管道工作:

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
}

1 个答案:

答案 0 :(得分:2)

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

所以这个:

def String getOSPassword() {
    return this.osPassword
}

表现得像这样:

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

你的代码进入无限递归(对于setter和赋值也一样)。

在你的制定者和吸气者中,您需要使用Groovy direct field access operator

def String getOSPassword() {
    return this.@osPassword
}
相关问题