Top / Java / Jenkins / プラグイン開発のTIPS集 / FilePath

Jenkinsの抽象化されたjava.io.Fileである FilePath?

ビルドのジョブが動くノード*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

となります。これはマスタで動いてしまいましたが、一行目はワークスペースなので場合によっては別ノードのパスになります。逆に二行目はビルドパスなので必ずマスターサーバのパスになります。


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Java / Jenkins / プラグイン開発のTIPS集 / FilePath

現在のアクセス:2458


*1 マスターかスレーブか

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS