我正在尝试在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
));
如何摆脱异常?
答案 0 :(得分:2)
这是因为某些变量不可序列化。
来自doc
由于管道必须在Jenkins重新启动后继续运行,因此正在运行的程序的状态会定期保存到磁盘,以便以后可以恢复(在每个步骤之后或在
sh
之类的步骤中进行保存)。
您可以使用@NonCPS
注释进行创建,
使用
@NonCPS
def createSSHClient() {
// your code here.
}