基本上,没有多余的废话,我无法将构建属性传递给Library var调用。
jenkinsfile相关的块:
tc_test{ repo = 'test1' folder = 'test2' submodules = true refs = params.GitCheckout }
导致错误
java.lang.NullPointerException:无法在空对象上获取属性’GitCheckout’
但是,这可行:
def a1 = params.GitCheckout tc_test{ repo = 'test1' folder = 'test2' submodules = true refs = a1 }
共享库中vars / tc_test.groovy的内容:
def call ( body ) { def config = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = config try { body() } catch(e) { currentBuild.result = "FAILURE"; throw e; } finally { config.each{ k, v -> println "${k}:${v}" } } }
我对groovy不太满意,所以这可能很明显。
得到了詹金斯JIRA 的答案。
一个小的解决方法是使用映射而不是闭包:
tc_test ([ repo: 'test1', folder: 'test2', submodules: true, refs = params.GitCheckout ])
可能有缺点,但是对我来说效果很好。
仍然必须将params作为参数来访问它们,但是至少现在代码更有意义了。