Jenkins 共享管道库是否支持 vars/*. groovy
中的静态变量文件?
例子
“隐式”引用全局变量(不起作用)
file: vars/foo.groovy
---
def functionFoo() {return "foo"}
file: vars/bar.groovy
---
def result = functionFoo()
def functionBar() {println result}
file:Jenkinsfile
---
@Library('MyLib') _
bar.functionBar()
这会引发错误:
groovy.lang.MissingPropertyException: No such property: result for class: groovy.lang.Binding at groovy.lang.Binding.getVariable(Binding.java:63) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224) at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241) at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:24) at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20) ....
“显式”引用全局变量(确实有效)
file: vars/foo.groovy
---
def functionFoo() {return "foo"}
file: vars/bar.groovy
---
def functionBar() {
def result = functionFoo()
println result
}
file:Jenkinsfile
---
@Library('MyLib') _
bar.functionBar()
概括
我假设变量要么以不同的方式初始化,要么根本不能与
vars/
一起使用。目录功能一样可以。这个特性是 Groovy 语言的一部分吗?或者 Jenkins 的全局管道库的限制?
最佳答案
要在 groovy 变量中定义一个变量而不是函数,请使用 groovy.transform.Field :
@groovy.transform.Field result = functionFoo()
def functionBar() {println this.result}
关于Jenkins 共享管道库 : Can I declare static variables in vars file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227332/