gpt4 book ai didi

java - Jenkins 管道异常 java.io.NotSerializedException : hudson. model.User

转载 作者:行者123 更新时间:2023-12-02 11:46:15 26 4
gpt4 key购买 nike

我正在使用声明性 Grovvy 管道创建 Jenkins Pipeline 项目。有人问我必须在哪里为某些操作设置超时,如果任务没有在定义的时间内完成,那么我必须在 shell 中运行一些清理命令。设置过程是这样的

#!/usr/bin/groovy
import com.vmware.jenkins.utils.JenkinsGroovyCommon
.
.
def user
wrap([$class: 'BuildUser']) { user = env.BUILD_USER_ID }
print "DEBUG: parameter USERNAME = ${user}" // Output : DEBUG: parameter USERNAME = xyz
stage ('Verify') {
try {
timeout(time: 2, unit: 'MINUTES') {
print "${env.BUILD_USER_ID}" // Output : xyz
print "Do some verification"
.
.
.
}
}
catch(err) {
def inputuser = err.getCauses()[0].getUser()
if('SYSTEM' == inputuser.toString()) {
print "${env.BUILD_USER_ID}" // Output : null
print " ${BUILD_URL} has reached an input timeout, failing build."
message = "${BUILD_URL} has reached an input timeout, failing build."
}
try {
sh '''
echo "Do cleanup!"
'''
} catch (Exception e) {
print "Failed to exeucute cleanup : " + e
}
}

(我为每个打印语句提供了内联输出)当我执行上面的管道时,控件永远不会到达以下 shell 脚本

  sh '''
echo "Do cleanup!"
'''

而是抛出异常

Failed to exeucute cleanup : java.io.NotSerializableException: hudson.model.User

从输出中我们可以看到 env.BUILD_USER_ID 设置为 null 看起来 hudson.model.User 也是 <强>空

看起来超时后,这些变量正在重置。如何避免这些空值并使 hudson.model.User 具有与以前相同的值?或者你们建议的任何其他方法?

最佳答案

我在使用多分支管道时也遇到这样的问题,这是因为jenkins需要在某个时刻序列化步骤或阶段等过程,以防jenkins重新启动,以便它可以重新处理这些过程。

异常“Failed to exeucute cleanup : java.io.NotSerializedException: hudson.model.User”表示jenkins尝试序列化Object user,但无法序列化。代码行:
def inputuser = err.getCauses()[0].getUser()
导致异常。通常,我们可以尝试使用属于String或Number类型的变量,这些类型很容易被序列化。因此,要解决该异常,您可以像这样更改代码:
def inputuser = err.getCauses()[0].getUser().toString()

关于java - Jenkins 管道异常 java.io.NotSerializedException : hudson. model.User,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48186693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com