メールでJenkinsにコマンドを送りたい(5) 〜Groovy対応〜

Groovy対応って言ってますが、たいした物ではありません。
いやいや、威張る所ではない(笑)のですが、基本方針は以下の通り。

  • CLIコマンドとして「groovy」を見つけたら、メール本文をファイルに保存
  • ファイルの保存先は、ビルドごとのフォルダ(つまり重複しない)
  • CLIクラスに渡す時に、「groovy」の引数として先ほど保存したファイルのフルパスを渡す


実装ですが、全体としては前回載せているので、メールの件名判定ループ部分だけ。

    public String receive(AbstractBuild build, BuildListener listener) {
        //〜〜〜省略〜〜〜
            for (Message message : messages) {
                String findStr = message.getSubject().split(" ")[0];
                if (commands.indexOf(findStr) != -1) {
                    subject = message.getSubject();
                    InternetAddress[] addresses = (InternetAddress[]) message.getFrom();
                    saveFile(build, "tmp.address", addresses[0].getAddress());
                    if ("groovy".indexOf(findStr) != -1)
                        saveFile(build, "groovy.script", (String) message.getContent());
                    message.setFlag(Flag.DELETED, true);
                    break;
                }
            }
        //〜〜〜省略〜〜〜
    }

上のsaveFileは以下のような簡単なファイル保存のロジックです。

    private void saveFile(AbstractBuild build, String filename, String contents) {
        try {
            FileOutputStream fos = new FileOutputStream(new File(build.getRootDir(), filename));
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write(contents);
            bw.close();
            osw.close();
            fos.close();
        } catch (IOException ioe) {
            System.err.println(ioe.getMessage());
        } finally {
        }
    }

<recieveメソッドについて>
以下の部分で、メール本文を保存しています。

if ("groovy".indexOf(findStr) != -1)
    saveFile(build, "groovy.script", (String) message.getContent());

ただし、現在は文字コードなどを考慮せずに保存しているので、ダブルバイトコードが存在すると問題が発生する恐れがあります。


さて実験の時間です。下のような状況の(若干寂しい感じ)のJenkinsが動作している環境があったとします。


件名に「groovy」本文に好きなgroovyスクリプト(こちらも寂しいが。)を書いた以下のようなメールを送信すると、、、


以下のように、groovyスクリプトの実行結果がメールで送られてきます。


もちろん、携帯でも!


最初のぼんやりとした発想時点では、手元に携帯くらいしかないときにメールか何かでコマンド発行できたら
便利かなというのがあったので、携帯はありだと思っていました。


なんとか目標のところまでたどり着くことができました。
このプラグインは、jenkins-ci.orgにホスティングしましたので、インストールして試してみるも、
ソースをいじって自分なりに楽しんでみるのもご自由にどうぞ。