groovy.lang.MissingPropertyException:没有这样的属性:

ber*_*olo 1 groovy jenkins-groovy jenkins-pipeline

我正在尝试使用 groovy 脚本对 jenkins 管道进行一些更改,但我不断收到此错误:

groovy.lang.MissingPropertyException: No such property: credentials for class:

我试过用 with 声明变量,def但仍然出现异常,eclipse 无法识别该属性存在。

我究竟做错了什么?!

#!/usr/bin/groovy

package common.pipeline

import common.pipeline.Credentials

Credentials credentials = new Credentials()

def withCredentials(steps) {
    credentials.productionPipeline(steps)
}
Run Code Online (Sandbox Code Playgroud)

tim*_*tes 5

这个脚本将被 groovy 编译成一个 Script 类,该类在run方法内部定义了字段,并使用另一个withCredentials尝试访问该字段的方法(有点像这样):

import common.pipeline.Credentials

class Script1 extends Script {

    def withCredentials(steps) {
        credentials.productionPipeline(steps)
    }

    def run(args) {
        Credentials credentials = new Credentials()
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这是行不通的,因为凭据不在类中的字段级别...

Groovy 有一个注释来实现这一点:

#!/usr/bin/groovy

package common.pipeline

import common.pipeline.Credentials
import groovy.transform.Field

@Field Credentials credentials = new Credentials()

def withCredentials(steps) {
    credentials.productionPipeline(steps)
}
Run Code Online (Sandbox Code Playgroud)