JS7 JobScheduler 初めてのWorkFlow実行

# 概要
サンプルWorkFlowをいくつか動かしながら、WorkFlowの基本操作を説明します。
また、ごく簡単なWorkFlowを作成してみます。
JS7 JobScheduler を初めて触る人向けの基本操作の説明です。

# 前提条件

- JS7 jobscheduler の環境準備、初期設定、サンプルの登録を済ませていること。
まだの方はこちらから
[JS7® JobScheduler 初期設定、サンプルWorkFlowの登録](https://qiita.com/saitamanokusa/items/2d3162b688329f5ecae2)



# 基本操作

まず、WorkFlowの実行操作、および実行ログの見方を確認します。

## WorkFlowの実行

WORKFLOWS を開くと、現在定義され、Deploy済みとなっているWorkFlowが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/5695446d-d60d-adb8-56d8-b0d7e994ae38.png)


01_HelloWorld/jduHelloWorld を実行します。
＋ボタンをクリックすると、Order追加画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/4fe7901c-500b-d5c7-f50b-6572ab1beec2.png)

そのまま Submit で処理が実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/77bafc89-ffd5-cf98-1f0f-493f4c1a371c.png)

- Order Name : Order ID 末尾に実行ユーザー名が入るが、カスタマイズできる<br>基本空のままでよい。
- Start Time : 実行時間を指定可能。　Now（デフォルト）で即時実行

---

下のOrder History より、ログを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/42be9b31-7a98-e58d-0395-ee848aba5fb2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/08c1ef60-6bd1-92f1-7f0e-7dd1e6ab7053.png)

## ログの確認（ログの更新）

同様に、01_HelloWorld/jduHelloRunningLog を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/f1bfc6ce-14e3-8ea3-9af7-b4c4358f2918.png)

このWorkFlowは、100まで毎秒コメントを出力しつづけます。
Order History よりログを確認すると、随時追記されていくことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/4ff3c66b-9b39-ed59-9b7d-0afb0d4c0d1b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/0d2d4026-d56c-e5ce-4876-15a479c620b6.png)

このように、実行に時間がかかる処理でも、ログを見ることで、随時状況を追うことが可能です。

## WorkFlow表示の切り替え

複数のJOBで構成されるWorkFlow実行する際に、表示を切り替えることで、実際の進行状況やステータスを視覚的に確認することが可能です。

02_ParallelExecution/jduFork を確認します。
ボタンから表示を切り替えられることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/e8e604dc-1967-819d-5945-550995f8ffd1.png)


show tabular view (表形式)
（画面右上の Add Order から、WorkFlowの実行を行えます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/f297be7a-45c8-936c-8caa-b12bb2704ff6.png)

show grafical view
（画面右上の Add Order から、WorkFlowの実行を行えます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/20ca7f71-5d20-9207-494a-e963c548ebda.png)

実行中は、処理の進行状況を、視覚的に確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/8eae7625-e92f-b5f5-2003-502b18574f64.png)

:::note
どの表示で実行しても、実行内容は何ら変わりません。
:::

## ログの確認（複数JOB）

今回実行したWorkFlowは、複数のJOBで構成されています。
Order History と Task History を見比べて見ます。

Order History 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/578b580f-ca36-010b-1c9f-0a23afcb4924.png)

全JOBを展開し、stdout のみ選択した例
WorkFlow全体を通したログを容易に確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/565ed785-d9a5-f221-5c50-1601e186c89b.png)


- Main: Agentとcontroller,joc との通信
- Success/Error: 処理の成功／エラーを示す内容
- stdout/stderr: JOBの標準出力／標準エラー
- Detail: Controller によって追加された詳細な状態遷移

:::note
実際にチェックボックスや展開範囲を切り替え、表示が変わることを確認してみてください。
:::

---

最初から 確認したいJOBが明確ならば、Task Historyからの指定が楽です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/b0e905f6-885c-f616-1d43-30fb2589470f.png)



## History

過去の履歴を確認したい場合は
History メニュより、保存期間内の Order History , Task History を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/8b489409-6da6-78ea-8160-ecfcdab931ea.png)
※こちらは様々な条件指定で検索も可能です。

## エラー発生時の対処

04_ErrorHandling/jduFail を実行します。
このWorkFlowは、Order変数 `return_value_job1 = 1` が定義されており、そのまま実行すると、job2でFailとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/3d1eb7e4-8c58-a04f-8561-7629edb826ca.png)

このままでは、実行途中でFailedで止まったままのOrderが残ってしまうため、こちらはキャンセルします。
（Order自体をFailed→Cancel扱いとする）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/54c1c052-7e1d-11f5-aa07-4a8290ab5970.png)

これでOrderがCencelで終了となり、途中処理も消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/3a4e54e9-1f77-dc53-e6c3-614f75543633.png)

- cancel: ジョブを終了（Grace Timeout 時間経過後、強制終了）
- cancel/kill tasks: ジョブを強制終了
- resume : 今の位置から再開
- resume parameterized　パラメータ指定して再開

>補足: 今後のバージョンで、Skipも可能となる見込みです
[When executing a workflow jobs should provide the option to "skip" execution](https://change.sos-berlin.com/browse/JS-1969?src=confmacro)

## 実行時にOrder変数を指定

改めて、エラー条件を回避するために、Order変数を指定して実行します。

Orderを登録する画面にて、 Modify Variableをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/8cc9f47b-bdd3-57a3-1083-09fda1d0b49f.png)

Order変数の指定が可能となります。
`return_value_job1 = 0` を指定して実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/beca63cd-91e4-dc50-86d0-4ebda0d58b13.png)


これで途中の If条件箇所 job2 はスキップされ、正常終了したことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/b16ac72b-b854-7b61-29b8-052e5a380f75.png)


# WorkFlow作成

WorkFlowを試しに作ってみます。

## WorkFlowの定義

CONFIGURATION - Inbentory にて、新規フォルダ `Practice` を作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/c91f97d9-ecee-2a52-ff88-f04e3b62ede4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/f9ed875d-7931-8b17-04d8-fd37ebab134c.png)


作られたPractice フォルダ以下、Controller - Workflows まで展開し、新規WorkFlowを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/cfff53df-d245-f149-67cb-76b926bd0302.png)
ここでは `hello-workflow` という名前にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/5babdd80-23d1-d1ad-7a85-9091aee43db1.png)




Job をドラッグ＆ドロップで追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/dae1ac03-86c0-069f-2f95-ddbc9c39893c.png)

JOBの設定項目を下記のように登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/475e7cbb-7eb8-8bd5-d5fc-f6fe8a44d005.png)


|項目 | 値 |
|-|-|
|Name (必須) | job1 |
|Label (必須) | job1 （基本はNameと同じでよい）|
|Title | 空（任意） |
|Documentation | 空 htmlやmarkdownで作った資料を指定できます |
|Agent (必須)| PrimaryAgent |
|Job Resources| 空 |
|Return Code| On Success で 0 を指定|
|JobClass | Shell |
|Script | `echo "hello"`(任意)|

ここまで作成したら、Deploy をしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/38403db7-f2b4-a226-e1f7-733c827e1e91.png)


正常にDeployができたら、先ほどのサンプルと同様に、WorkFlowを実行し、ログを確認してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/1b401912-291d-c194-4c25-cc5835a277e0.png)

## 複数JOBのWorkFlowを定義

今作ったWorkFlow`hello-workflow` をさらに編集していきます。

例えばこんな感じで定義します。
Fork（並列処理）を追加していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/8d57cff2-a6b7-1c91-3d84-65bf25bcacdf.png)

Forkの処理中や終了後に、さらにJOBを追加していきます。

このとき、各JOBの`Name`と`Label`は必ず分けてください。
※別のJOBでも、Nameが同じだと、他の設定も同期されてしまいます。
（実際のJOBの定義はご自由にしてください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/f4c35731-b8bb-89a6-c395-ccaae7f9610d.png)


|項目 | 値 |
|-|-|
|Name (必須) | job2, job3, job4, job5 |
|Label (必須) | job2, job3, job4, job5 （基本はNameと同じでよい）|
|Title | 空（任意） |
|Documentation | 空 |
|Agent (必須)| PrimaryAgent |
|Job Resources| 空 |
|Return Code| On Success で 0 を指定|
|JobClass | Shell |
|Script | `echo "hello"`(任意)|


できましたら、実際にDeployして、WorkFlowを実行、ログを確認してみてください。

## JobResourceの利用

今作ったWorkFlow`hello-workflow` をさらに編集していきます。

WorkFlowの Job Resources にて、 `/Defaults/Default` を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/725a10fa-cecc-ebc9-911f-c29c421263af.png)

:::note warn
JOB ではなく、WorkFlowの設定で選択してください。
個々のJOBでもJob Resourceを選べますが、該当JOBでしか有効になりません。
:::

各JOBとも、Scriptを下記のよう変更します。

```shell
echo 
echo "using workflow: $JS7_WORKFLOW_NAME"
echo "running job: $JS7_JOB_NAME"
sleep 5
```

できましたら、実際にDeployして、WorkFlowを実行、ログを確認してみてください。
`$JS7_WORKFLOW_NAME`、`$JS7_JOB_NAME` の箇所には、WorkFlow名、Job名が入ってきたことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/72785cd5-c14f-900c-1739-671e59d54468.png)




# 最後に

ここまでの基本操作が分かれば、あとはサンプルWorkFlowを実際に触りながら、動作確認を順次進められるかと思います。
こちらのページに、各サンプルWorkFlowの概要をメモしてますので、ご参考にしてください。
[サンプルWorkFlowのざっくりとした説明](https://qiita.com/saitamanokusa/items/2d3162b688329f5ecae2#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%ABworkflow%E3%81%AE%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E3%81%A8%E3%81%97%E3%81%9F%E8%AA%AC%E6%98%8E)