我有以下目录结构
(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!"
我能够访问脚本 block 内 Jenkinsfile 中的变量
echo "${foo.GlobalVar}"
由于 vars 文件夹位于 src 文件夹级别,是否可以在类内访问相同的变量?
最佳答案
示例代码中的 "${foo.GlobalVar}"
正在尝试根据 Bar
类型解析 foo
。由于没有 foo
引用,因此无法解析,您可能会得到类似 MissingPropertyException
的信息。
Jenkins Pipeline Groovy 使用 Groovy 编译和运行时 API 进行一些不同的编译和绑定(bind)。全局变量还可以通过 script
对象通过其动态 GroovyObject
API 进行解析(在源代码 here 中进行了演示)。最简单的方法是让 Jenkins 实现的动态 Groovy 对象解析来解析您的变量。
更改您的线路:
this.script.echo "${foo.GlobalVar}"
从 script
对象中查找 foo
(我假设是 this
或 script
在 Jenkins 管道中通过 new Foo(this, config)
):
this.script.echo "${this.script.foo.GlobalVar}"
关于jenkins - 如何访问groovy类文件中的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382345/