Joh*_*ees 9 groovy jenkins jenkins-pipeline
使用Jenkins管道插件时,构建失败并出现java.io.NotSerializableException错误,如下所示:
java.io.NotSerializableException: org.codehaus.groovy.control.ErrorCollector
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
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.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.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
...
Caused by: an exception which occurred:
in field collector
in field abnormal
in field outcome
in field body
in field step
in field thread
in field this$0
in field returnAddress
in field parent
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@6ae7e4f1
...
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)
当我使用带有一些import语句的自定义库时会发生这种情况.我已经尝试了几件事,比如用@NonCPS封装调用方法,但错误仍然存在.
管道脚本
#!groovy
@Library('utils')
pipeline {
agent any
stages {
stage('Run Script') {
script {
myScript param1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
瓦尔/ myScript.groovy
import com.company.jenkins.utils
def call(String param = "test") {
def libScript = LibScript(this)
libScript.printMessage("Hello World")
}
Run Code Online (Sandbox Code Playgroud)
SRC/COM /公司/詹金斯/ utils的/ LibScript
package com.company.jenkins.utils;
// This import works fine
import groovy.json.*
// This one fails
import groovyx.net.http.RESTClient
class LibScript implements Serializable {
def steps
def client
LibScript(steps) { this.steps = steps }
def printMessage(String message) { steps.echo "Saying: " message }
// This also fails
@NonCPS
def doSomething() { client = new groovyx.net.http.RESTClient( 'https://somehost/' ) }
}
Run Code Online (Sandbox Code Playgroud)
使用的版本:
会出现此错误是因为compilation error. 这不是一个很好的堆栈跟踪。但是您将 anon serializable object作为变量之一或在字符串中间(可以将变量值设置为 '.."$var"..' )。为此,我附上两个链接。请仔细阅读它们,您就会明白出了什么问题。请一步步运行,了解哪里出了问题。
1)https://issues.jenkins-ci.org/browse/JENKINS-40109
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |