ワークフローエンジンの Digdag を本格的に使い始めたのですが、バージョン 0.9.3 の現在、通知系のオペレータは mail:>
くらいしかありません。
プラグインを使うことで Slack 通知が可能になりますが、Digdag のホスティングサービスである Treasure Workflow で同じことをしようとしてややハマったのでメモしておきます。
Digdag で Slack プラグインを使う
Digdag には digdag-slack という素敵プラグインがあるのですが、残念ながら最新の 0.9.3 では動作しないということで @bwtakacy さんが qiita.com という記事を書いてくれました。
その結果、
_export: plugin: repositories: - file://path/to/workspace/digdag-slack dependencies: - jp.techium.blog:digdag-slack:0.1.2 +step1: slack>: message.txt webhook: https://hooks.slack.com/services/XXXXXXXX # <-- Slack Incoming WebHooks url channel: general username: webhookbot icon_emoji: ghost
という感じで動かすことができるようになったのですが、これを Treasure Workflow で動かそうとすると
2017-01-31 21:04:53.077 +0000 [INFO] (0589@+my_project+step1) io.digdag.core.agent.OperatorManager: slack>: message.txt 2017-01-31 21:04:53.077 +0000 [ERROR] (0589@+my_project+step1) io.digdag.core.agent.OperatorManager: Configuration error at task +my_project+step1: Unknown task type: slack (config)
などと怒られてしまいます。
@myui さんの
を参考に Jitpack に登録して
_export: plugin: repositories: - https://jitpack.io dependencies: - com.github.myui:digdag-plugin-example:v0.1.2
などとしても結果は同じでした。
http:> オペレータで Webhook を叩くのが楽
結局、
+step1: http>: https://hooks.slack.com/services/XXXXXXXXXX # <-- Slack Incoming WebHooks url method: POST content: text: "タスク1の通知です :tada:" content_format: json
などとして標準梱包の http:>
オペレータを使うようにしてプラグインが使えない問題を回避しています。Digdag も Treasure Workflow も同じコードでいけるはずなので、これが現状一番手軽かもしれません。
Sending messages using Incoming Webhooks | Slack に記載されているような他のオプションも投げられるはずなので
+step1: http>: https://hooks.slack.com/services/XXXXXXXXXX # <-- Slack Incoming WebHooks url method: POST content: username: "ghost-bot" icon_emoji: ":ghost:" channel: "#other-channel" text: "タスク1の通知です :tada:" content_format: json
というようにもできるはずです(未検証)。
(余談)0.9.3 で digdag push から -p
パラメータがなくなった
digdag-slack プラグインの README では
_export: plugin: repositories: - file://${repository_path} dependencies: - jp.techium.blog:digdag-slack:0.1.0
として
$ digdag r hello_world.dig -p repository_path=/path/to/workspace/digdag-slack
というように repository のパスを -p
で指定するようになっていますが、これを push しようとした時 digdag 0.9.3 では -p
オプションが無くなっているためうまくいきません。
$ digdag push --help 2017-02-01 02:31:38 +0900: Digdag v0.9.3 Usage: digdag push <project> -r <revision> Options: --project DIR use this directory as the project directory (default: current directory) -r, --revision REVISION specific revision name instead of auto-generated UUID --schedule-from "yyyy-MM-dd HH:mm:ss Z" start schedules from this time instead of current time -e, --endpoint HOST[:PORT] HTTP endpoint (default: http://127.0.0.1:65432) -L, --log PATH output log messages to a file (default: -) -l, --log-level LEVEL log level (error, warn, info, debug or trace) -X KEY=VALUE add a performance system config -c, --config PATH.properties Configuration file (default: /Users/yamabe/.config/digdag/config)
結局上述したように file://path/to/workspace/digdag-slack
というようなパスを埋め込むことにしたのですが、他に良いやり方がある気がします。