k_v*_*ath 4 groovy global-variables jenkins jenkins-pipeline
我有以下目录结构
(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global 'foo' variable
Run Code Online (Sandbox Code Playgroud)
我在以下文件中有以下代码行
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
}
}
Run Code Online (Sandbox Code Playgroud)foo.groovy
import groovy.transform.Field
@Field GlobalVar="Hello World!"
Run Code Online (Sandbox Code Playgroud)我能够访问脚本块中Jenkinsfile中的变量
echo "${foo.GlobalVar}"
Run Code Online (Sandbox Code Playgroud)
是否可以访问类中的相同变量,因为vars文件夹位于src文件夹级别?
将"${foo.GlobalVar}"在您的示例代码试图解决foo对Bar类型.由于没有foo参考,它无法解决,你可能会得到类似的东西MissingPropertyException.
Jenkins Pipeline Groovy使用Groovy编译和运行时API进行一些不同的编译和绑定.全局变量也可以script通过其动态GroovyObjectAPI 通过对象解析(在此处的源代码中进行了演示).最简单的方法是让Jenkins实现的动态Groovy对象解析解析您的变量.
改变你的行:
this.script.echo "${foo.GlobalVar}"
Run Code Online (Sandbox Code Playgroud)
而是foo从script对象中查找(我假设是this或者script在你的Jenkins管道中new Foo(this, config)):
this.script.echo "${this.script.foo.GlobalVar}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |