Jenkins共享管道库:我可以在vars文件中声明静态变量吗?

时间:2016-10-24 20:50:52

标签: jenkins jenkins-pipeline

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:没有这样的属性:结果为   class:groovy.lang.Binding at   groovy.lang.Binding.getVariable(Binding.java:63)at   org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)     在org.kohsuke.groovy.sandbox.impl.Checker $ 4.call(Checker.java:241)     在   org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)     在   com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:24)     在   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语言的一部分吗?或詹金斯全球管道图书馆的限制?

1 个答案:

答案 0 :(得分:6)

要在groovy vars中定义变量而不是函数,请使用groovy.transform.Field

@groovy.transform.Field result = functionFoo()
def functionBar() {println this.result}