ビルドのジョブが動くノード*1によって、ワークスペースのパスは異なっていたりします。なのでJenkinsのファイルシステムはjava.io.Fileに似た FilePath?というパスが抽象化されたクラスを使用します。以下サンプルコード。
@Override public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { FilePath root = build.getModuleRoot(); // ワークスペースのルート.スレーブでビルドが動くと、他サーバのディレクトリだったりする。 FilePath fromFile = new FilePath(root, "from.txt"); System.out.println(fromFile); FilePath toFile = new FilePath(new FilePath(build.getRootDir()), "to.txt"); // ココはビルドのルートで、必ずMasterサーバ上にある System.out.println(toFile); fromFile.copyTo(toFile); // こんな感じにノード間でコピーできる。 // (このビルドがスレーブで動く場合、スレーブのワークスペースのファイルが、マスターサーバにコピーされたりする。) return true; }
このように動いているサーバを抽象化し、ノード間のコピーもシームレスにできたりします。便利ですね。。
実行結果は
[省略]/workspace/hoge/work/jobs/Test/workspace/from.txt [省略]/workspace/hoge/work/jobs/Test/builds/2015-09-25_13-12-45/to.txt
となります。これはマスタで動いてしまいましたが、一行目はワークスペースなので場合によっては別ノードのパスになります。逆に二行目はビルドパスなので必ずマスターサーバのパスになります。
この記事は
現在のアクセス:2458