所以问题是,我无法在不调用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
}
答案 0 :(得分:2)
当groovy执行this.osUsername = osUsername
或return 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
}