Azkabanでflowが失敗したらJIRAにissueを作るpluginを実装した

タイトルの通りですが、まずAPI経由でJIRAにissue登録する方法は下記を見ればわかると思います。
https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-example-create-issue
https://docs.atlassian.com/jira/REST/cloud/#api/2/issue

で、次にどうやってAzkabanのflow失敗をトリガーにするかという話ですが、最初はAzkabanのHTTP Job Callbackを使おうと思ってました。
http://azkaban.github.io/azkaban/docs/latest/#common-configurations

ただこれはJobであってFlowではないです。

例えばJobが失敗してretryで成功してFlow全体として成功の場合でもissue登録されてしまう。
10回retryして10回失敗したら10個issue登録されてしまう。

やりたいことはJobではなくFlowが失敗したときにissue登録したいので、やり方を探したけど設定でどうにかなるものでもなさそうでした。

で、Azkabanのソースを眺めていたらalert pluginなる仕組みがあることを発見。
https://github.com/azkaban/azkaban/blob/master/azkaban-common/src/main/java/azkaban/executor/AlerterHolder.java

やり方としてはAlerterインターフェースを実装します。
https://github.com/azkaban/azkaban/blob/master/azkaban-common/src/main/java/azkaban/alert/Alerter.java

今回は失敗時をトリガーにしたいのでalertOnErrorメソッドを実装しました。

実装したものはこちら
https://github.com/wyukawa/jira

あとはこれを
azkaban-web-server-[version]/plugins
ディレクトリ下に以下のように配置します。

└── alerter
    └── jira-1.0
        ├── conf
        │   └── plugin.properties
        └── lib
            └── jira-1.0.jar

plugin.propertiesのalerter.classに実装したクラス名を書きます。
alerter.nameは好きな名前を付けますが、今回はjiraにしています。

で、これでOKかというとそうじゃなくてflow実行時にparameterがないと動きません。
alert.typeに上記alerter.nameで指定したものを付与します。

この辺は別にドキュメントがあるわけじゃないのでAzkabanのソースを見ながら雰囲気で実装しました。