// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents



** Jenkinsの抽象化されたjava.io.Fileである FilePath [#o7ffc559]
ビルドのジョブが動くノード((マスターかスレーブか))によって、ワークスペースのパスは異なっていたりします。なので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
となります。これはマスタで動いてしまいましたが、一行目はワークスペースなので場合によっては別ノードのパスになります。逆に二行目はビルドパスなので必ずマスターサーバのパスになります。






----
この記事は
#vote(おもしろかった,そうでもない)


#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}


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