パイプライン ジョブの Jenkinsfile で、javadoc jar をリモート ホストに scp する必要があります。これを行うために必要な部品に一日中苦労していますが、まだ機能していません。
これには「sshagent」を使用しようとしています。ブロックから参照している「秘密鍵付きのユーザー名」資格情報を定義しました。ブロック内で、実行する scp/ssh シェル コマンドをいくつか作成します。
現在、ステージ内のコード ブロックは次のようになっています。
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
スタック トレースは、スクリプトのどの行が問題になっているのかについての直接的な手がかりを提供しません。「sshagent」ブロックをコメントアウトしてみましたが、例外は発生しません (そしてジョブは何も役に立ちません)。そのため、そのブロックからエラーが発生していることは明らかです。
シリアライゼーションの問題は通常 @NonCPS メソッドに行くことを示していると聞きましたが、これを変換してこれを解決する方法がわかりません。