【问题标题】:NotSerializableException using Publish Over SSH in JenkinsfileNotSerializableException 在 Jenkinsfile 中使用 SSH 发布
【发布时间】:2017-08-22 17:56:39
【问题描述】:

我正在尝试在 Jenkinsfile 中使用 Publish over SSH 插件。但是,我在createClient 方法中遇到了异常java.io.NotSerializableException。这是我的代码:

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

我怎样才能摆脱这个异常?

【问题讨论】:

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


    【解决方案1】:

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

    来自doc

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

    你可以使用@NonCPS注解来创建, 使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2021-10-10
      • 2018-03-21
      相关资源
      最近更新 更多