Jenkins全局脚本与全局变量互引用:/vars函数如何获取Jenkinsfile脚本对象
不存在可以直接获取调用方Jenkinsfile脚本对象的this.owner或this.parent内置属性,/vars目录下的全局脚本默认不会自动注入调用方上下文,你可以通过以下两种方案解决:
【推荐方案】调用时显式传递Jenkinsfile上下文
这是Jenkins共享库的标准实践,兼容性强、逻辑清晰,不会出现版本适配问题。
全局函数定义(/vars/myFunc.groovy)示例:#!/usr/bin/env groovy def call(def script, String param1, String param2) { // 直接使用传入的script对象调用Jenkins原生步骤 script.sh "ls -la" // 传入自定义类实例即可兼容原有逻辑 myFlow = new myWorkflow(script) // 后续业务逻辑 }Jenkinsfile中调用示例:
// 直接把当前Jenkinsfile的this作为第一个参数传入即可 myFunc(this, "测试参数1", "测试参数2")【不推荐方案】通过Groovy调用栈隐式获取
你可以通过当前线程的调用栈反射拿到调用方的脚本对象,但该方案依赖Groovy和Jenkins的内部实现,版本更新后大概率失效,不建议在生产环境使用。示例代码如下:def getCallerScript() { def stack = Thread.currentThread().stackTrace for (frame in stack) { if (frame.className.startsWith('WorkflowScript')) { return this.binding.variables.get(frame.className) } } return null }
内容的提问来源于stack exchange,提问作者Hank Ratzesberger
相关产品推荐
相关产品推荐

