最新版のJobScheduler(v.1.13.4)をdocker-composeで一式を一発で動かす

表題の通り、JobSchedulerのv.1.13.4をDocker Compose使って一発で使えるようにしてみました。

JobSchedulerとは、OSSのジョブ管理ツールです。
最近のv.1.13だと、ジョブの実行管理や、ジョブの編集等全部Webで完結してできるようになって、だんだんと扱いやすくなってきているようです。

Docker hubにいくつか既存のものありそうだったのですが、最新版をちょっと試したかったのでcomposeに落としてみました。

## 出来上がる構成

出来上がるとこんな感じの構成で各コンテナが動きます。

![JobScheduler_compose.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/a6396844-8824-89b7-7fed-18485152a321.png)

DBとして、MariaDBのコンテナを動かします。
ジョブの実行管理を行う実態はJobScheduler Masterです。
JOC Cockpitというのは管理ダッシュボードです。ジョブの実行状況の確認、ジョブの実行管理、ジョブの定義などなど実施できます。
JobScheduler Universal Agentはジョブの実行先に導入するAgentです。

それぞれコンテナ間で通信して実行管理されます。

## Docker composeで立ち上げる

設定一式は以下のリポジトリに公開しています。

[GitHub: jobscheduler-compose](https://github.com/ike-dai/jobscheduler-compose)

このリポジトリのコードを取得してきて、docker-compose upするだけでOKです。

```
$ git clone https://github.com/ike-dai/jobscheduler-compose.git
$ cd jobscheduler-compose
$ docker-compose up -d
```

Docker、docker-composeは事前に導入してある想定です。

JOC Cockpitにアクセスすればダッシュボードが使える状態になるかと思います。

### ちょっと補足

最初、jobschedulerのコンテナをalpineベースのイメージ上で動かそうとしたのですが、schedulerの実行バイナリがどうもalpine上だとライブラリとかの問題なのか動かなかったため、openjdk:8-slimというdebianベースのものを使っています。

## JOC Cockpitでジョブ登録してみる

http://[Dockerホスト]:4446
にアクセスすると、ログイン画面が出るので、デフォルトのユーザ名・パスワード(root/root)でログインします。

### ジョブの実行先のエージェントクラスタ(プロセスクラス)を登録

まず、ジョブの実行先の情報を登録する必要があります。
[ジョブ定義]→[エージェントクラスタ]から新規作成を行います。
以下の画像のように情報を登録します。

この時、ホストURLはコンテナで立ち上がっているagentを指定します。http://jobscheduler-agent:4445でOKです。
今回は1台のエージェントしか作ってないので、エージェントクラスタといってもこの1台のエージェントだけの登録になります。

![job_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/a7905c05-1413-4809-8983-20457160f41e.png)

定義が完了したら右上にある「配置」を実行して定義情報を登録します。


### ジョブの登録(オーダージョブの登録)

次に、実行するジョブの実態を登録します。
先程と同じくジョブ定義から「ジョブ」を選択し、「オーダージョブ」を追加します。

![job_0-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/163714ce-4d88-268c-6d19-149a766387de.png)

上記の例は、先程登録したエージェントクラスタ上で、シンプルにshellのジョブを実行するジョブの設定になります。

同じような感じで、上記ジョブが成功した時に実行されるジョブと失敗した時に実行されるジョブも登録しておきます。

最後に「配置」を忘れずに実行します。

### ジョブチェーンの登録

ジョブチェーンを登録します。
先程作成したオーダージョブをフローに従って処理させてみます。

![job_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/d084d322-f66d-50ac-ab70-08de8374a4d0.png)

まずはジョブチェーンの基本情報を登録。

次にジョブチェーンのステップを設定します。上記画面上右上の「ステップ/ノード」を実行するとグラフィカルな定義画面になります。

![job_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/87ab3a10-c3e6-b043-f94f-8f050bfeadcc.png)

エディタの左側に先程登録したオーダージョブがリストアップされているので、そこからまず最初に実行するジョブをドラッグ＆ドロップで配置します。
するとジョブの実行実態を示すフルノードとsuccessとerrorの終端ノードの3つが表示されます。

これだけだと、単発のジョブ実行して終了という流れなので、先程作った成功時に呼ばれるオーダージョブと失敗時に呼ばれるオーダージョブも同じようにエディタ上にドラッグ＆ドロップします。

単純に置くだけだと、前の処理が成功したら順次実行されていくようになるだけなので、最初に配置したジョブに対してリターンコードを見て処理を振り分ける設定も入れてみます。

ちょっと設定箇所わかりずらいですが、以下の図のようにジョブのノードの左上に出てくるメニューボタンを押して「リターンコード」を選択すれば設定画面に移れます。

![job_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/85388bd5-ee79-554c-7727-bf60a5aed49f.png)

こんな感じで処理のリターンコードと、その値の時の次の行き先を選択すればOKです。

![job_0-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/ac2b33e1-6514-4fc8-a1c5-ea00350ed906.png)

これでジョブチェーンの定義ができたので、あとは実行の設定(オーダー設定)です。

作成したジョブチェーンの設定画面上に「オーダー」というボタンがあるのでそれを選択し、オーダーの定義を行います。
オーダーにランタイム設定を行うことでいつこのジョブチェーンを動かすかの設定ができます。

![job_0-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/3870156c-fdb3-d6ab-2123-c1f9d4f0ef79.png)

ここの例だと、毎日10分置きに処理を実行するようなランタイム定義です。


これで設定完了です。
あとは定義に合わせて自動で処理が実行されます。

## ジョブの実行状況の確認

ダッシュボードから状況は確認できます。

![job_0-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45851/31215738-b98e-17d5-7aa9-58618f21f84d.png)

## さいごに

久しぶりにJobScheduler動かしてみましたが、JOC Cockpitがかなり良くなってきてますね。
これまで、ジョブのエディタはクライアントアプリを別途導入して作らないといけなかったりと手間がかかっていましたが、Webで全部完結で管理が楽にできるようになりました。
docker-composeでもサクッと動かせるのでお試しください。