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のソースを見ながら雰囲気で実装しました。