こんばんは!久しぶりの更新となりましたが…
またしてもDigdagネタです。
以前 Workflow Engines Night という名の勉強会で登壇させてただく機会があり、
社内におけるDigdagの導入事例を紹介させていただきました!
その時の資料がこちら↓
https://speakerdeck.com/player/a958b93d92b04faeafa619d0182201c5?#embed
このセッションの中でスライドの48枚目~出ている
mog
というGo言語製のツールを事例紹介させていただいたのですが、
意外と好評だったこともありまして、本日Githubにてリリースをいたしました!
mogのリポジトリはこちらです。
特徴
- Go言語製でJavaがなくても動かすことができるクライアントです
- ただし、Digdagはサーバ / クライアント構成を前提としています
- ビルド済みのバイナリを配布しているので、Goがなくても動きます!
- 2017-06-25 現在できることとして…
- 既にpushされたプロジェクトのワークフローをスタート・リトライすることができます
- 特定のプロジェクト / ワークフローのタスクステータスが取得できます
- タスクのステータスポーリングする機能もあります
使い方
使い方の詳細に関しては、READMEも合わせてご覧ください。
下記の1コマンドでインストールができます。
ダウンロードされるバイナリは /usr/local/bin
にダウンロードされます。
$ curl https://raw.githubusercontent.com/szyn/mog/master/_tool/get | sh
Mac / Linux / Windowsに対応しています (※ 64bitのみ)
mogのデモ
紹介がてら、 mog のデモをやってみることとします。
demo
プロジェクトの sample
ワークフロー
- サーバ=localhost、PORT=65432 で稼働中
# sample ワークフローを作成
$ digdag init -t ruby sample
2017-06-25 23:35:08 +0900: Digdag v0.9.9
Creating sample/scripts/myclass.rb
Creating sample/sample.dig
Creating sample/.gitignore
Done. Type `cd sample` and then `digdag run sample.dig` to run the workflow. Enjoy!
# 作成したsampleディレクトリにcd
$ cd sample
# Digdagをサーバモードで起動し、demo ワークフローとしpush
$ digdag push demo
2017-06-25 14:41:30 +0000: Digdag v0.9.12
Creating /src/.digdag/tmp/archive-4893107422066944587.tar.gz...
Archiving sample.dig
Archiving scripts/myclass.rb
Workflows:
sample.dig
Uploaded:
id: 1
name: demo
revision: 41db9056-80bd-4716-8245-611ec02fd95b
archive type: db
project created at: 2017-06-25T14:41:33Z
revision updated at: 2017-06-25T14:41:33Z
Use `digdag workflows` to show all workflows.
ここまでで、WEB UI上からはこうなっているはずです。
ワークフローの定義はこんな感じ。
ワークフローをスタートしてみる
それでは、mogを利用してワークフローをスタートしてみます。
$ mog start --project demo --workflow sample
{
"id": "1",
"index": 1,
"project": {
"id": "1",
"name": "demo"
},
"workflow": {
"name": "sample",
"id": "1"
},
"sessionId": "1",
"sessionUuid": "bcb6fb0c-1268-44e8-8af5-2ff5aefed861",
"done": false,
"success": false,
"cancelRequested": false,
"createdAt": "2017-06-25T14:42:34Z",
"finishedAt": "",
"workflowId": "1",
"sessionTime": "2017-06-25T00:00:00+00:00",
"params": {}
}
すると、mog経由でワークフローが実行されます。
ステータスを取得してみる
# 試しに先程実行したタスクのステータスを確認
$ mog status --project demo --workflow sample +sample+teardown
{
"id": "4",
"fullName": "+sample+teardown",
"parentId": "1",
"config": {
"label": "finish",
"rb>": "MyClass.print_time",
"time": "${session_time}"
},
"upstreams": [
"3"
],
"state": "success", # stateがsuccessになっている
"exportParams": {},
"storeParams": {},
"stateParams": {},
"updatedAt": "2017-06-25T14:42:42Z",
"retryAt": null,
"startedAt": "2017-06-25T14:42:41Z",
"isGroup": false
}
現状はsuccessになると終了ステータスが0になります。
jqなどで、ゴニョゴニョすることも可能です。
基本的にはこんな感じになります。
また会社のチームの方に polling status
を実装していただきましたので、
特定のタスクをpollingすることもできます(๑•̀ㅂ•́)و✧
(この場を借りまして…本当に感謝です!)
一言
まだまだ機能が少なかったり、物足りない部分があるのが事実です。
…が!そこは Gopherの皆さまやDigdagのコミュニティー皆さまのお力添えを受けつつ、
どんどん良いものとしていきたいなと考えています(๑•̀ㅂ•́)و✧
今後の展望とか
直近やりたいこととしてはCLI周りのテスト改善・機能追加を継続してやっていきたいな〜と考えています。
ぜひ検証目的でも良いので、使っていただいてフィードバックがもらえたら嬉しいです。
何か気がついたことがあれば、Issue・PRをよろしくお願いします!
https://github.com/szyn/mog
最後に…
Digdagについてもっと知りたい時は、こちらのQiitaが詳しいのでぜひ見てみてくださいね。
ワークフローエンジンDigdagのまとめ