![](/img/trans.png)
[英]Jenkins Multibranch Pipeline: script / jenkinsfile as svn external
[英]Jenkins Pipeline external script returning a null value
我的问题与此类似,关于如何加载外部groovy脚本,然后在另一个groovy脚本中从中调用方法。 到目前为止,我已经能够获得不返回值的方法,但是我无法将返回的值转换为被调用的变量。
例如,以下管道代码有效,但是当我运行Jenkins管道时, $build_user
的值为null
。 它实际上并没有返回我期望的结果,我也不知道为什么。
node {
stage('test') {
def tools = load "/var/lib/jenkins/workflow-libs/vars/tools.groovy"
build_user = tools.get_user()
echo "build_user: $build_user"
}
}
这是相关的tools.groovy
样子。
def exampleMethod() {
// Do stuff
}
// Try to get a build username
def get_user() {
try {
wrap([$class: 'BuildUser']) {
// Set up our variables
fallback_user = 'GitHub'
github_user = BUILD_USER
commit_author = 'Test1'
// Try to use Jenkins build user first
if (github_user) {
echo "using github_user: $github_user"
return github_user
}
// Otherwise try to use commit author
else if (commit_author) {
echo "using commit_author: $commit_author"
return commit_author
}
// Otherwise username is blank so we use the default fallback
else {
echo "using fallback: $fallback_user"
return fallback_user
}
}
}
catch (err) {
// Ignore errors
}
echo "Done."
}
return this
这是上述代码的完整Jenkins输出。
Started by user XXX
[Pipeline] node
Running on master in /var/lib/jenkins/workspace/test
[Pipeline] {
[Pipeline] stage
[Pipeline] { (test)
[Pipeline] load
[Pipeline] { (/var/lib/jenkins/workflow-libs/vars/tools.groovy)
[Pipeline] }
[Pipeline] // load
[Pipeline] wrap
[Pipeline] {
[Pipeline] echo
using github_user: XXX
[Pipeline] }
[Pipeline] // wrap
[Pipeline] echo
Done.
[Pipeline] echo
build_user: null
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
如果我删除最后return this
,并在Jenkins中引发以下错误,则上述方法根本不起作用。
java.lang.NullPointerException:无法在空对象上调用方法get_user()。
我究竟做错了什么? 我怀疑我缺少一些简单的东西,但是我对Groovy并不满意,所以我不确定会是什么。
您必须以return this
结束您的tools.groovy
。
查看此问题的答案如何加载groovy文件并执行它
您的函数get_user()
返回任何内容。
该return(s)
内wrap([$class: 'BuildUser']) {...}
不要从返回wrap
类,而不是从你的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.