当前位置: 首页 > 知识库问答 >
问题:

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

翟光赫
2023-03-14

我正在尝试在 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
    ));

我怎样才能消除异常?

共有1个答案

杨无尘
2023-03-14

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

从文档

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

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

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

  • 问题内容: 在Jenkins “通过Ssh发布”插件中,如何使用Label(高级选项)又称为参数化发布功能。如何使用标签字段。我要在“标签”字段中输入什么。我是否需要放置一个具有Machine Name的变量名(我可以从build参数读取一个变量名)。我尝试了同样的方法这是我所做的: 我的机器名称为QA_1,并且有一个变量jenkins build $ MC_NAME指向XXX。我在LABEL字段

  • 问题内容: Jenkins要求使用证书才能使用 ssh 发布和 ssh 命令。可以在下进行配置。 问题是:如何创建证书? 我有两台ubuntu服务器,一台运行Jenkins,一台用于运行应用程序。 我应该设置Jenkins证书并将其一部分放置在部署框中,还是将证书设置在部署框上并将其一部分放置在Jenkins上?证书是否需要使用名为Jenkins的用户名,或者可以用于任何用户?我们在开发箱上没有J

  • java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“PublishOversh”[archive,bat,build,catchError,checkout,deleteDir,dir,dockerFingerprintFrom,Docker FingerPrintRun,echo,emailext,EmailExtrecients,envVarsForTool

  • 问题内容: 我有根目录下带有Jenkinsfile的Maven springboot项目。我已经在jenkins文件中编写了阶段来构建jar文件,并且工作正常。下一阶段是``部署’‘,我必须将jar文件移动到Linux服务器并在其中运行它。任何人都可以在jenkinsfile阶段帮助我,如何将jar文件从Jenkins服务器移至另一台服务器并在其中运行。 问题答案: 1.您可以使用SSH上发布插件

  • 问题内容: 我想将文件从我的后期构建Jenkins工作区传输到远程服务器上的某个位置。构建过程顺利进行,但始终传输0个文件。 这是控制台输出: 作业配置为在将任何提交推送到GitHub后进行构建 传输集为:源文件: 删除前缀: 问题答案: 我认为,您的配置存在问题。我们有2个职位要配置。 在系统配置(全局配置)中。->如果测试正常==>可以配置到远程服务器。 在您的项目中。我们将专注于传输集:(源