目前,我正在尝试制作这个(简化的)Jenkins管道脚本。请帮助我找到如何正确传递字符串VAR 1。我尝试使用裸露的VAR 1、{var 1}、“{VAR 1}"或类似下面的(我知道有些看起来很愚蠢,但我有点绝望),但没有任何效果。
def VAR1 = 'build architectures'
def BuildANew(variables)
{
echo "Build declaration"
build job: 'LocalJenkins', parameters:[
extendedChoice(name: 'VAR1', value: ${VAR1}),
param(name:'Variables', value:variables)
]
}
pipeline{
...
stages{
stage("Build"){
parallel{
stage("Build1"){
agent{
label 'label'
}
steps{
BuildANew(parameters)
}
}
}
}
}
}
它返回了以下错误:
groovy.lang.MissingPropertyException: No such property: VAR1 for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:271)
at org.kohsuke.groovy.sandbox.impl.Checker$7.call(Checker.java:353)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:357)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.BuildANew(WorkflowScript:39)
at WorkflowScript.run(WorkflowScript:155)
- 谢谢-谢谢
2条答案
按热度按时间fv2wmkja1#
在Groovy脚本中,作用域可以不同于一个典型的类本身。因此,如果你从其他函数访问全局变量,你需要显式地改变它们的
scope
。为了改变变量的作用域,你可以使用@Field
注解,将变量的作用域从局部变量改为Script class
变量。你有两个选择。
使用@Field注解更改变量的作用域
将变量从管道传递给函数
如果你想读更多。有一个很好的解释here。
ippsafx72#
我找到了解决办法,可能不完美,但它的工作,目前。