Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当执行shell时,Jenkins管道“java.io.NotSerializableException:hudson.model.User”_Shell_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

当执行shell时,Jenkins管道“java.io.NotSerializableException:hudson.model.User”

当执行shell时,Jenkins管道“java.io.NotSerializableException:hudson.model.User”,shell,jenkins,groovy,jenkins-pipeline,Shell,Jenkins,Groovy,Jenkins Pipeline,这是我的管道代码。请注意,函数promoteBuild是假的,它需要执行shell块。在这里,我只是让它回显一个常量字符串 pipeline { agent none stages { stage("PromoteBuild") { agent { label "test_agent" } steps { script

这是我的管道代码。请注意,函数promoteBuild是假的,它需要执行shell块。在这里,我只是让它回显一个常量字符串

   pipeline {
    agent none

    stages {
        stage("PromoteBuild") {
            agent {
                label "test_agent"
            }
            steps {

                script {

                    mopName = "mop name"
                    try {

                        // Timeout in case to avoid running this forever
                        timeout(time: 30, unit: 'SECONDS') {
                            promoteMap = input id: 'promote', message: 'Choose bundled buildNumbers', ok: 'Promote?',
                                    parameters: [

                                            string(
                                                    defaultValue: mopName,
                                                    description: '',
                                                    name: 'MopName'),

                                    ],
                                    submitter: "xxxx", submitterParameter: 'approver'
                        }
                      promoteBuild()

                    } catch (err) {
                        def user = err.getCauses()[0].getUser()
                        if ('SYSTEM' == user.toString()) { // SYSTEM means timeout.
                            //No response means the build is launched by timer, promote the first bundled-number
                            echo "Promote only. No following deployment"
                            promoteBuild()
                            currentBuild.result = 'SUCCESS'
                        } else {
                            //if user aborted this operation, do nothing and mark the build as aborted
                            currentBuild.result = 'ABORTED'

                            echo "This build was aborted by [${user}]"
                        }

                    }

                }
            }
        }
    }

def promoteBuild() {
sh """
    echo "hello"
  """
}
当我响应输入请求时,函数promoteBuild在try块中成功工作,但在catch块中超时时失败

以下是控制台输出:

Input requested
Cancelling nested steps due to timeout
[Pipeline] }
[Pipeline] // timeout
[Pipeline] echo
Promote only. No following deployment
[Pipeline] sh
[testTmp] Running shell script
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline
***java.io.NotSerializableException: hudson.model.User***
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
    at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
    at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
    at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
    at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
    at java.util.HashMap.writeObject(HashMap.java:1354)
    at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
    at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
    at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
    at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
    at java.util.TreeMap.writeObject(TreeMap.java:2434)
    at sun.reflect.GeneratedMethodAccessor421.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
我很确定它与用户无关,因为如果我删除shell调用,构建就会成功。有什么提示吗?

请参阅

因此:程序中使用的任何变量值都应该是数字、字符串或其他可序列化类型

您的问题在这一行: def user=err.getCauses[0]。getUser

返回的对象类型为hudson.model.User,即不实现可序列化接口

由于您只对用户名感兴趣,因此可以执行以下操作:

def user = err.getCauses()[0].getUser().toString()
if ('SYSTEM' == user) {
这将起作用,因为字符串是可序列化的

您可能还想首先找出异常发生的真正原因-尝试将其记录在catch块中。

请参阅

因此:程序中使用的任何变量值都应该是数字、字符串或其他可序列化类型

您的问题在这一行: def user=err.getCauses[0]。getUser

返回的对象类型为hudson.model.User,即不实现可序列化接口

由于您只对用户名感兴趣,因此可以执行以下操作:

def user = err.getCauses()[0].getUser().toString()
if ('SYSTEM' == user) {
这将起作用,因为字符串是可序列化的


您可能还想首先找出异常发生的真正原因——尝试将其记录在catch块中。

@Vasan的答案是正确的解决方案。我只想补充一下,当您不添加promoteBuild行或删除shell调用时,行为会有所不同的原因。 如报告所述

由于流水线必须重置詹金斯重启,运行程序的状态被定期保存到磁盘,以便它可以恢复,稍后在每一步或在步骤的中间发生,例如SH。< /P>


您可以看到,使用sh invoking的步骤将触发要保存的管道状态,从而触发序列化操作,然后引发java.io.NotSerializableException。

@Vasan的答案是正确的解决方案。我只想补充一下,当您不添加promoteBuild行或删除shell调用时,行为会有所不同的原因。 如报告所述

由于流水线必须重置詹金斯重启,运行程序的状态被定期保存到磁盘,以便它可以恢复,稍后在每一步或在步骤的中间发生,例如SH。< /P>


您可以看到,使用sh invoking的步骤将触发要保存的管道状态,从而触发序列化操作,然后引发java.io.NotSerializableException。

是的,您是对的。在我按照你的建议更改代码后,它就起作用了。我只是好奇,如果我不添加promoteBuild行,为什么它也能工作。由于某种原因,最初的异常被抛出并吞没在promoteBuild的catch中。这就是为什么我建议首先在catch中记录异常。一旦你登录并发现异常,如果你不能解决它,就发布另一个问题。是的,你是对的。在我按照你的建议更改代码后,它就起作用了。我只是好奇,如果我不添加promoteBuild行,为什么它也能工作。由于某种原因,最初的异常被抛出并吞没在promoteBuild的catch中。这就是为什么我建议首先在catch中记录异常。一旦你登录并发现异常,如果你不能解决它,就发布另一个问题。也许值得为答案添加一条评论,而不是问题的答案。嗨,我知道,但它不允许我对其他人的答案发表评论,因为我是一名新撰稿人。要评论的50个声誉:你好。也许值得为答案添加一条评论,而不是问题的答案。嗨,我知道,但它不允许我对其他人的答案发表评论,因为我是一名新撰稿人。要评论的50个声誉: