![](/img/trans.png)
[英]groovy.lang.MissingPropertyException: No such property: kubernetes for class: groovy.lang.Binding - when variable is empty
[英]Jenkins method cannot get variable (groovy.lang.MissingPropertyException: No such property: variable for class: groovy.lang.Binding)
目前我正在嘗試制作這個(簡化的)Jenkins管道腳本。 請幫助我了解如何正確傳遞字符串 VAR1。 我嘗試使用裸露的 VAR1、{var1}、“{VAR1}”或如下所示(我知道有些看起來很愚蠢,但我有點絕望)但沒有任何效果。
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)
謝謝你。
在 Groovy 腳本中,作用域可以不同於典型的類本身。 因此,如果您從其他函數訪問全局變量,則需要顯式更改它們的scope
。 為了更改變量范圍,您可以使用@Field
注釋將變量的范圍從本地更改為Script class
變量。
您在這里有兩個選擇。
使用@Field注解改變變量的范圍
import groovy.transform.Field
@Field 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)
}
}
}
}
}
}
將變量從管道傳遞給函數
def VAR1 = 'build architectures'
def BuildANew(variables, VAR1)
{
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, VAR1)
}
}
}
}
}
}
如果你想閱讀更多。 這里有一個很好的解釋。
我找到了解決方案,可能不完美,但它現在有效。
VAR1 = 'build architectures'
def BuildANew(variables)
{
echo "Build declaration"
build job: 'LocalJenkins', parameters:[
extendedChoice(name: 'VAR1', value: ${VAR1}),
param(name:'Variables', value:variables)
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.