Jenkinsfile中的sshagent块导致NotSerializableException

时间:2016-12-13 00:51:05

标签: jenkins jenkinsfile

在管道作业的Jenkins文件中,我需要将javadoc jar scp到远程主机。我一整天都在努力完成所需要的工作,而且还没有工作。

我试图使用" sshagent"为了这。我用私钥定义了一个"用户名"凭证,我从块中引用。在块中,我构造了一些scp / ssh shell命令来运行。

我在舞台上的代码块目前如下所示:

  println "JP_MechIdPrivateKey[${JP_MechIdPrivateKey}] class[${JP_MechIdPrivateKey.class.name}]"
  sshagent (credentials: [JP_MechIdPrivateKey]) {
    sh "scp ${javadocJarPath} ${JP_JavadocJarHost}:/tmp"
    sh "ssh ${JP_JavadocJarHost} \"cd ${JP_JavadocRootRemotePath}; rm -rf ${versionNumber}; mkdir ${versionNumber}\""
    sh "ssh ${JP_JavadocJarHost} \"cd ${JP_JavadocRootRemotePath}; jar xvf /tmp/${baseFileName}\""
  }

当我运行时,我看到以下内容:

JP_MechIdPrivateKey[<myusername>-private-key] class[java.lang.String]

[ssh-agent] Using credentials <myusername>
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent]   Java/JNR ssh-agent
[ssh-agent] Skipped registering BouncyCastle, not running on a remote agent
[ssh-agent] Started.
[Pipeline] {

[Pipeline] sh
[ssh-agent] Stopped.
[usl-parent] Running shell script
[Pipeline] }
[Pipeline] // sshagent
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
...
java.io.NotSerializableException: sun.nio.fs.UnixPath
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
...
Caused by: an exception which occurred:
    in field locals

堆栈跟踪并未提供有关脚本中哪一行存在问题的任何直接线索。我试着评论&#34; sshagent&#34;阻止,并且不会发生异常(并且作业没有做任何有用的事情),因此很清楚错误来自该块。

我听说序列化问题通常表明要使用@NonCPS方法,但我不知道如何对其进行转换以解决此问题。

0 个答案:

没有答案