我正在尝试在Jenkinsfile中使用 通过SSH发布 插件。但是,我java.io.NotSerializableException在createClient方法中遇到了异常。这是我的代码:
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 ));
如何摆脱异常?
这是因为某些变量不可序列化。
来自文件
由于管道必须在Jenkins重新启动后才能幸免,因此正在运行的程序的状态会定期保存到磁盘,以便以后可以恢复(保存在每个步骤之后或在步骤的中间进行,例如sh)。
sh
您可以使用@NonCPS注释进行创建,使用
@NonCPS
@NonCPS def createSSHClient() { // your code here. }