jenkins - 在脚本化管道的输入步骤中使用在 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)
。我也尝试将名称和年龄声明为全局变量,但这也不起作用。
我究竟做错了什么?谢谢您的帮助。
解决方案
解决方案
你有几个问题。首先,在声明或初始化变量之前调用您的方法。其次,您仅在条件评估为真时声明和初始化变量。尝试以下
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
}
推荐阅读
- javascript - 根据 setTimeout/Button Click 使用 Javascript 打开弹出窗口/模式
- python - 在 Pandas 数据框中查找子字符串的前任和后继
- elasticsearch - Elastic_exporter 无法连接启用 https 的 uri
- python - os.path.join 不加入目录和文件
- java - 动态访问动态端点
- rust - actix-session、sqlx、async-graphql 的错误问题
- javascript - 如何使用 vue-router 设置背景颜色
- c# - .NET 代码优先 gRPC 中的 MethodName 转换
- r - 将指定的列除以相同的值
- arrays - 如何从具有不同索引的 Laravel 对象数组中获取 2 个最高值