私は Jenkins プラグインを作成しbuild.getWorkspace()
ており、現在のワークスペースへのパスを取得するために使用しています。問題は、これが FilePath オブジェクトを返すことです。
これを File オブジェクトに変換するにはどうすればよいですか?
私は Jenkins プラグインを作成しbuild.getWorkspace()
ており、現在のワークスペースへのパスを取得するために使用しています。問題は、これが FilePath オブジェクトを返すことです。
これを File オブジェクトに変換するにはどうすればよいですか?
私はこれを試していませんが、 javadocによると、ファイルを作成できる URI を取得できます。File myFile = new File(build.getWorkspace().toURI())
プラグインがマスターとスレーブで動作する必要がある場合は、 act関数を使用して独自のFileCallable実装を呼び出してください。詳細については、ドキュメントの「Using FilePath smartly」の章またはこのstackoverflow answerを確認してください。
コード例 (ソース):
void someMethod(FilePath file) {
// make 'file' a fresh empty directory.
file.act(new Freshen());
}
// if 'file' is on a different node, this FileCallable will
// be transferred to that node and executed there.
private static final class Freshen implements FileCallable<Void> {
private static final long serialVersionUID = 1;
@Override public Void invoke(File f, VirtualChannel channel) {
// f and file represent the same thing
f.deleteContents();
f.mkdirs();
return null;
}
}
このアプローチ
File myFile = new File(build.getWorkspace().toURI())
は正しい解決策ではありません。なぜこれがこれまで受け入れられてきたのかはわかりません。Sascha Vetter が言及したアプローチは正しいものであり、公式の Jenkins javadocsから参照されています。
、それははっきりと言っており、私は引用します
常に現在のコンピューター上のファイル パスを意味する File とは異なり、FilePath は特定のエージェントまたはコントローラー上のファイル パスを表します。
Jenkins コミュニティへの積極的な貢献者として、Sascha Vetter の回答を参照します。
PS。評判ポイントの基準により、正しい回答に賛成票を投じることができません。