簡體   English   中英

Jenkins 方法無法獲取變量(groovy.lang.MissingPropertyException:沒有這樣的屬性:類的變量:groovy.lang.Binding)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM