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

时间:2017-08-22 17:56:39

标签: java jenkins groovy jenkins-plugins jenkins-pipeline

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

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
    ));

如何摆脱异常?

1 个答案:

答案 0 :(得分:2)

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

来自doc

  

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

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

@NonCPS
def createSSHClient() {
// your code here.
}