我有以下目录结构
(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global 'foo' variable
我在以下文件中有以下代码行
Bar.groovy
package org.foo class Bar implements Serializable { def config def script Bar(script, config){ this.script = script this.config = config } def accessGlobalVars(){ this.script.echo "${foo.GlobalVar}" // throws an err } }
foo.groovy
import groovy.transform.Field @Field GlobalVar="Hello World!"
我能够访问脚本块内 Jenkinsfile 中的变量
echo "${foo.GlobalVar}"
是否可以访问类中的相同变量,因为 vars 文件夹位于 src 文件夹级别?
示例代码中的"${foo.GlobalVar}"
正在尝试针对Bar
类型解析foo
。由于没有foo
引用,因此无法解析,您可能会得到类似MissingPropertyException
的东西。
Jenkins Pipeline Groovy 使用 Groovy 编译和运行时 API 进行一些不同的编译和绑定。全局变量也可以通过script
对象的动态GroovyObject
API 进行解析(在此处的源代码中演示(。最简单的方法是让 Jenkins 实现的动态 Groovy 对象解析解析您的变量。
将您的线路从:
this.script.echo "${foo.GlobalVar}"
要从 script
对象中查找foo
(我假设这是 Jenkins 管道中的this
或script
new Foo(this, config)
(:
this.script.echo "${this.script.foo.GlobalVar}"