首页 > 解决方案 > 在脚本化管道的输入步骤中使用在 If 语句内分配的变量的值

问题描述

我有一个示例脚本管道,如下所示:

def a = 9
def b = 6
def c = 7
def d = 5

def userInputs(){
  timeout(time:10, unit:'MINUTES'){
  chosenInputs = input(
  id:'Proceed', message: 'choose', parameters:[
    [$class: 'StringParameterDefinition', defaultValue:"${name}", description:'Your name', name:'username'],
    [$class: 'StringParameterDefinition', defaultValue:"${age}", description:'No of Pods', name:'userAge']])
  }
}

node{
  userInputs()
if (a > b){
  name= "Peace"
  age="4"
}
  name = "{chosenInputs['username']}"
  age = "{chosenInputs['userAge']}"
  println ("User Input:\n" + chosenInputs)
  
timeout(time:10, unit:'MINUTES')  {   
if (d < c){
        name=${name}
        age=${age}
        println("Name: ${name}")
        println("Age: ${age}")
        
      }
}
      //println("Name: $name")
      //println("Age: $age")
}

我的目标是在条件为真时将输入步骤中参数的默认值设置为 if 语句中的变量值(姓名和年龄)。但是,我收到错误消息groovy.lang.MissingPropertyException: No such property: name for class: groovy.lang.Binding at groovy.lang.Binding.getVariable(Binding.java:63)。我也尝试将名称和年龄声明为全局变量,但这也不起作用。

我究竟做错了什么?谢谢您的帮助。

标签: jenkinsgroovyjenkins-pipelinepipelinejenkins-groovy

解决方案


解决方案

你有几个问题。首先,在声明或初始化变量之前调用您的方法。其次,您仅在条件评估为真时声明和初始化变量。尝试以下

def a = 9
def b = 6
def c = 7
def d = 5

def userInputs() {
  timeout(time:10, unit:'MINUTES') {
     chosenInputs = input(id:'Proceed', message: 'choose', parameters:[
       [$class: 'StringParameterDefinition', defaultValue:"${name}", description:'Your name', name:'username'],
       [$class: 'StringParameterDefinition', defaultValue:"${age}", description:'No of Pods', name:'userAge']])
   }
}

node {

   if (a > b){
      name= "Peace"
      age="4"
   } else {
      name = ""
      age = ""
   }

  userInputs()
  
  // other code

}

推荐阅读