在管道作业的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方法,但我不知道如何对其进行转换以解决此问题。