Jenkins 共享管道库 : Can I declare static variables in vars file?

标签 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: 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/

相关文章:

Jenkins 码头代理和工作区

docker - 在持久卷支持下在jenkins pod中执行docker和kubectl命令

jenkins - jenkins 有什么办法可以通过轮询 Github 来自动构建而不需要 Hook 吗?

jenkins - 在Openshift中为Jenkins实例配置不同的构建工具

jenkins - 获取Jenkinsfile(Groovy)中给定文件夹中的文件名列表

jenkins - 在声明性管道中并行在多个代理上运行相同的 Jenkins 作业

if-statement - 如何在 jenkins 脚本管道作业中使用 bool 参数编写条件步骤?

python - 使用多分支管道 Jenkinsfile 时构建环境中的 SSH key

jenkins - 尝试从 jenkinsfile 访问文件系统

docker - 如何在 Jenkins 脚本化管道中使用 dockerhub-notification-plugin?