小编典典

在Jenkinsfile中使用通过SSH发布的NotSerializableException

jenkins

我正在尝试在Jenkinsfile中使用 通过SSH发布
插件。但是,我java.io.NotSerializableExceptioncreateClient方法中遇到了异常。这是我的代码:

def publish_ssh         = Jenkins.getInstance().getDescriptor("jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin")
def hostConfiguration   = publish_ssh.getConfiguration("${env.DSV_DEPLOY_SERVER}");

if( hostConfiguration == null )
{
    currentBuild.rawBuild.result = Result.ABORTED
    throw new hudson.AbortException("Configuration for ${env.DSV_DEPLOY_SERVER} not found.")
}

def buildInfo = hostConfiguration.createDummyBuildInfo();

def sshClient = hostConfiguration.createClient( buildInfo, new BapSshTransfer(
        env.SOURCE_FILE,
        null,
        env.DSV_DEPLOY_REMOTE_DIR,
        env.REMOVE_PREFIX,
        false,
        false,
        env.DSV_DEPLOY_COMMAND,
        env.DSV_DEPLOY_TIMEOUT as Integer,
        false,
        false,
        false,
        null
    ));

如何摆脱异常?


阅读 538

收藏
2020-07-25

共1个答案

小编典典

这是因为某些变量不可序列化。

来自文件

由于管道必须在Jenkins重新启动后才能幸免,因此正在运行的程序的状态会定期保存到磁盘,以便以后可以恢复(保存在每个步骤之后或在步骤的中间进行,例如sh)。

您可以使用@NonCPS注释进行创建,使用

@NonCPS
def createSSHClient() {
// your code here.
}
2020-07-25