JS7® JOCコックピット Git連携

JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、ジョブ管理システムです。
OSSジョブ管理ツールの定番JobSchedulerをリニューアルし、従来より耐障害性、大規模環境対応を強化し、ミッションクリティカルな要求に対応しました。

V.2.2.2よりGit連携機能のサポートが追加されました。
参考）

https://kb.sos-berlin.com/display/PKB/Release+2.2.2

また、V.2.3.0より、JOCコックピットより、Git操作の機能が追加されました。
参考）

https://kb.sos-berlin.com/display/PKB/Release+2.3.0

本書では、GitHubにデモ用リポジトリを作成し、開発環境のJS7で作成したジョブ定義をGitHubにコミットして、本番環境のJS7にロールアウトする方法を記載します。
参考）

https://kb.sos-berlin.com/display/PKB/JS7+-+How+To+-+Git+Integration

- LDAP連携機能を利用する際は以下の記事をご参照ください。
  https://qiita.com/Yoshitami/items/d891936095b1877dd93d

- HashiCorp Vault®連携を利用する際は以下の記事をご参照ください。
  https://qiita.com/Yoshitami/items/6920e747e512e6fa348b

# １．前提条件

JS7® JobScheduler V.2.3.0以上がインストール済みであること
JS7® JobSchedulerの概要及びインストール方法については以下を参照ください
**Dockerでのインストール手順**　https://qiita.com/satoruf/items/360fee5293611433ed33
**Windowsでのインストール手順**　https://qiita.com/Yoshitami/items/6804584592956a483364
**Linux/CLIでのインストール手順**　https://qiita.com/satoruf/items/fa9846f4376d1a50a67e

**GitHubのユーザ登録を行っていること**
※ユーザ登録を行っていない場合は以下より登録を行います。

https://github.co.jp/

# ２．JS7ローカルGitリポジトリについて

JS7のローカルGitリポジトリのディレクトリは、JOCインストールディレクトリに作成されます。

- Unix環境：
    - /opt/sos-berlin.com/js7/joc//jetty_base/resources/joc/repositories/local
    - /opt/sos-berlin.com/js7/joc//jetty_base/resources/joc/repositories/rollout
- Windows環境：
    - C:\ProgramData\sos-berlin.com\js7\joc\jetty_base\resources\joc\repository\local
    - C:\ProgramData\sos-berlin.com\js7\joc\jetty_base\resources\joc\repository\rollout

※上記のディレクトリはJOCインストール時のデフォルトのものとなります。

local/rolloutディレクトリは、それぞれのリポジトリタイプを保持するために使用されます。

- local：
    - Job Resources
    - Calendars
    - Schedules

スケジューリングオブジェクトタイプは通常、開発環境/テスト環境/本番環境等に固有の値を保持するため、このリポジトリに追加されます。 このようなオブジェクトは、環境間で展開されません。

- rollout：
    - Workflows
    - Resource Locks
    - File Order Sources
    - Notice Boards
    - Script Includes

上記のオブジェクトは、開発環境/テスト環境/本番環境等のロールアウト環境全体に展開できます。

詳細は以下をご確認ください。

https://kb.sos-berlin.com/display/PKB/JS7+-+How+to+set+up+a+local+Git+Repository

https://kb.sos-berlin.com/display/PKB/JS7+-+Git+Repository+Interface

# ３．JS7インストール環境

●Jobschedulerサーバ（開発環境/本番環境ともに共通）
・CentOS 7.9
・PostgreSQL 13.5
・openjdk 11
・JS7 2.3.0
・JS7インストールユーザ：scheduler
・作業はすべてJS7インストールユーザのschedulerで実施

・SELinuxはDisabled、Firewalldは停止されていること
・gitコマンドがインストールされていること
※gitコマンドがインストールされていない場合は以下のコマンドでインストールします。

```shell-session
# yum install git
```

# ４．GitHub SSH接続手順

JobschedulerサーバからGitHubに接続する設定を行います。以下の作業は**開発環境/本番環境**ともに設定を行います。

**（１）ユーザ情報の設定**

初期設定を行います、GitHubにてユーザ登録した情報をもとに設定を行います。
※以下の作業よりすべてJS7インストールユーザ、本書では「scheduler」ユーザにて実施します。

```shell-session
# su - scheduler
$ git config --global user.name "＜ユーザ名＞"
$ git config --global user.email "＜メールアドレス＞"
$ git config --global push.default simple
```

ユーザ情報の確認を行います。

```shell-session
$ git config --list
user.name=＜ユーザ名＞
user.email=＜メールアドレス＞
push.default=simple
```
※上記のようにユーザ情報が表示されることを確認します。

**（２）秘密鍵/公開鍵の生成**

```shell-session
$ ssh-keygen -t rsa -b 4096 -C "＜メールアドレス＞"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/scheduler/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/scheduler/.ssh/id_rsa.
Your public key has been saved in /home/scheduler/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:lTXnJ9RI9sB3DfNzpRjpncS3eJW53CBLOR71zUXVtps yamashita@ossl.co.jp
The key's randomart image is:
+---[RSA 4096]----+
|            +BX=@|
|           oBO*@&|
|          o+.B*B/|
|         .  +.oO+|
|        S     . o|
|               E |
|                 |
|                 |
|                 |
+----[SHA256]-----+
```
上記の表示のように秘密鍵/公開鍵がschedulerユーザディレクトリ配下に作成されることを確認します。

秘密鍵：/home/scheduler/.ssh/id_rsa
公開鍵：/home/scheduler/.ssh/id_rsa.pub

**（３）Gitのconfigファイルの作成**

Gitクライアントは、次のファイルから構成アイテムを読み取ります。

- Unix環境：
    - /home/＜JS7インストールユーザ＞/.ssh/config
- Windows環境：
    - C：\Users\＜JS7インストールユーザ＞\.ssh\config

configファイルは、特定の秘密鍵の使用をGitサーバでの認証にマップします。
秘密鍵/公開鍵を生成したディレクトリに「config」ファイルを作成し、以下の内容を記載します。

ファイル名：config
パス：/home/scheduler/.ssh

```shell-session
$ cd /home/scheduler/.ssh
$ vim config
※以下の内容を設定
Host github.com
    Hostname github.com
    IdentityFile /home/scheduler/.ssh/id_rsa
    IdentitiesOnly yes
```

configファイルのパーミッションを変更します。

```shell-session
$ chmod 600 config 
```

**（４）GitHubへの公開鍵の登録**

作成した公開鍵の内容を確認し、設定内容をコピーします。

ファイル名：id_rsa.pub
パス：/home/scheduler/.ssh

```shell-session
$ cd /home/scheduler/.ssh/id_rsa
$cat id_rsa.pub
※表示された内容をコピーします。
```

GitHubのURL、https://github.com にログインし、
GitHubのメニューの右上のアイコンから Settiongs ＞ SSH and GPG keys ＞ New SSH Key の順で移動します。
![SnapCrab_GitHub — Mozilla Firefox_2022-3-17_10-47-9_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/48381c8f-fcfa-4a8d-f23f-ffb6e7a861cf.png)
![SnapCrab_SSH and GPG keys — Mozilla Firefox_2022-3-17_10-47-17_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/1aadf260-07c4-070e-e747-04d7a15198f6.png)

Titleに適当なものを記載し、上記でコピーした公開鍵をKeyの項目に貼り付け、「Add SSH Key」を選択し登録します。
![SnapCrab_Add new SSH keys — Mozilla Firefox_2022-3-17_10-50-5_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/baad639f-6256-d39c-ced8-3f28f46be219.png)

**（５）GitHubとの接続確認**

GitHubとのSSH接続確認を行います。
以下のようにGitHubへのアクセスが成功してるメッセージが出力されることを確認します。

```shell-session
$ ssh -T git@github.com
Hi Yoshitami-Y! You've successfully authenticated, but GitHub does not provide shell access.
```

**（６）JOCでのGitHub資格情報の登録**

JOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューから、Root ＞ プロファイル ＞ Git管理 に移動し、GitHubに登録したアカウント情報を入力します。

![SnapCrab_JS7controller — Mozilla Firefox_2022-4-19_14-23-21_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/43a01a55-8313-89b7-300e-ff3f33055004.png)

Gitサーバ：github.com
Gitアカウント、ユーザ名、メールアドレス：＜GitHubに登録している情報＞
認証タイプ：キー
Git秘密鍵パス：＜作成した秘密鍵を指定＞


# ５．GitHub リポジトリの作成/接続手順

**（１）リポジトリの作成**

GitHubのURL、https://github.com にログインし、
GitHubのメニューの右上のアイコンから Your repositories で移動します。
![SnapCrab_GitHub — Mozilla Firefox_2022-3-17_11-10-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/b13fc3cb-d2bd-bd03-c239-5f730382d0d9.png)

「New」を選択し、JS7用のリポジトリを作成します。
![SnapCrab_Your Repositories — Mozilla Firefox_2022-3-17_11-12-11_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/a3cd45e1-9366-1818-7106-026a900f9870.png)

適当なリポジトリ名を記載し、「Create repository」を選択します。
※本書ではリポジトリ名は「js7」とします。
![SnapCrab_Create a New Repository — Mozilla Firefox_2022-3-23_8-7-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/9d0fe65d-47e3-9e0f-fdc5-8377aeb9a6d0.png)

**（２）リポジトリの接続確認**

リポジトリ作成後、開発環境のJobSchedulerサーバからリポジトリへ接続確認を行います。

```shell-session
$ git init
$ git remote add origin git@github.com:Yoshitami-Y/js7.git
$ git commit --allow-empty -m "first commit"
$ git branch -M main
$ git push -u origin main
```
※git pushコマンド実行時にユーザ名/パスワードの入力を求められる際には以下のコマンドでURLをSSHに修正を行い、再度git pushコマンドを実行します。

```shell-session
$ git remote set-url origin git@github.com:＜ユーザ名＞/＜リポジトリ名＞.git
```

# ６．開発環境で作成した新規ジョブ定義ファイルをGitHubへのコミット

開発環境でジョブ定義を作成し、GitHubへコミットします。
本手順は**開発環境**のJobSchedulerサーバより実行します。

**（１）ローカルGitリポジトリの設定**

開発環境のJOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリの設定を行います。
「/」を選択し、リポジトリ ＞ ロールアウト ＞ Git ＞ クローン の順で移動し、上記で作成したGitHubのリポジトリ情報を入力し、登録します。
※クローンで指定したフォルダは、存在しない場合は自動で作成されます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-24-12_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/ca8f5ea3-8d3b-63f2-f6a0-653da199036d.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-24-22_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/92578876-51af-1f7d-df6b-03fc23dd757b.png)

Git URI：上記のGitHubで作成したリポジトリのURLを指定
フォルダー名：Accounting
※本書でのローカルGitリポジトリの最上位ディレクトリは「Accounting」とします。

登録後、以下の画面のように、エラーが発生しないことを確認します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-28-6_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/1fb80fcc-dd58-c8ea-340f-de5092959f23.png)

**（２）ジョブ定義ファイルをローカルのGitリポジトリへ登録**

JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリに登録するジョブ定義ファイルを選択します。
上記で作成した、ローカルのGitリポジトリ上にジョブ定義を作成します。
※本手順ではジョブ定義の作成は割愛します、ジョブ定義の作成は以下をご参照ください。
参考）

https://qiita.com/satoruf/items/96f21ef25bcb35e47b21

本書では作成済みの「Accounting/HelloWorld/job/HelloWorldRunningLog」を登録するものとします。

「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ ＞ ロールアウト ＞ 保存先 を選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-33-20_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/b8d64f58-81c9-5658-7da9-85f72b6682c0.png)

ローカルのGitリポジトリに登録するジョブ定義を選択し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-34-37_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/b257d0ac-5907-65a7-2b16-4e75ed6dd3b7.png)

登録後、JobSchedulerサーバにて＜JOCインストールディレクトリ＞/jetty_base/resources/joc/repositories/rolloutディレクトリを確認すると、JOCのWebUIで登録したジョブ定義ファイルが追加されていることを確認できます。
※本書でのJOCインストールディレクトリは「/opt/sos-berlin.com/js7/joc」とします。

```shell-session
$ cd /opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting
$ ls HelloWorld/job/
HelloWorldRunningLog.workflow.json
```

**（３）GitHubのリポジトリにコミット**

JobSchedulerメニューからジョブ定義 に移動し、「Accounting」を選択し、リポジトリ ＞ ロールアウト ＞ Git ＞ プッシュ を選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-38-12_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/29518746-6d0b-b0f2-6b3d-6508e550ed65.png)

コメントを入力し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-40-36_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/c16e8bc2-fd98-9876-0a32-d513bc495fff.png)

登録後、以下のような画面が表示されエラーが発生していないことを確認します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-43-31_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/dc6d390c-3372-f83b-db0f-b7a70ea02a18.png)

GitHubのURL、https://github.com にログインし、
GitHubのメニューから作成したリポジトリ「js7」に移動すると、「HelloWorld/job/
HelloWorldRunningLog.workflow.json」が登録されていることを確認できます。

# ７．本番環境への新規ジョブ定義ファイルのロールアウト

上記の手順で開発環境からGitHubへコミットした新規ジョブ定義ファイルを本番環境へロールアウトします。
本手順は**本番環境**のJobSchedulerサーバより実行します。

また、本手順では、ロールアウトの方法として、以下の2通りの方法を記載します。
- ブランチを使用して、開発環境用と、本番環境用のリポジトリを分けて管理
    - ７－１．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けて管理）を参照してください
- 開発環境用と、本番環境用リポジトリを分けずに使用
    - ７ー２．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けずに使用）を参照してください。

### ７－１．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けて管理）

本手順は、JobSchedulerサーバよりgitコマンドを使用して登録を行います。

**（１）開発環境から本番環境のリポジトリにコピー**

ローカルのGitリポジトリディレクトリに移動し、GitHubのリポジトリを追加します。

```shell-session
$ cd /opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout
$ mkdir Accounting
$ cd Accounting
$ git init
Initialized empty Git repository in /home/scheduler/sos-berlin.com/js7/joc/resources/joc/repositories/rollout/.git/
$ git remote add origin git@github.com:Yoshitami-Y/js7.git
```

開発環境のリポジトリをリモートリポジトリとして追加し、本番環境のリポジトリにプッシュします。

```shell-session
$ cd /opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting
# 開発環境のリポジトリをリモートリポジトリとして追加
$ git remote add oldrepo git@github.com:Yoshitami-Y/js7.git
# リポジトリのコミットを取得
$ git remote update
# コミットIDの確認
$ git log --all --oneline --graph --decorate
* 44292d6 (origin/main, oldrepo/main) New job add
* 2af70b7 first commit
# 開発環境のリポジトリから本番環境のローカルのGitリポジトリにコミットするＩＤを選択
$ git cherry-pick 44292d6 
[master (root-commit) ada2c71] New job add
 1 file changed, 26 insertions(+)
 create mode 100644 HelloWorld/job/HelloWorldRunningLog.workflow.json
# 本番環境のリポジトリ（master）にプッシュ
$ git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 768 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
remote: 
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/Yoshitami-Y/js7/pull/new/master
remote: 
To git@github.com:Yoshitami-Y/js7.git
 * [new branch]      master -> master
# 開発環境のリポジトリへの参照を削除
$ git remote remove oldrepo
```

**（２）本番環境へのジョブ定義の登録**
開発環境にて作成した新規ジョブ定義を本番環境のローカルのGitリポジトリにコピーしたため、本番環境へジョブ定義をロールアウトします。

本番環境のJOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからジョブ定義 に移動し、
「/」を選択し、新規 ＞ 新規フォルダー を選択します。
※ここで作成するフォルダは、上記のCLIにて作成した「/opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting」ディレクトリとマッピングされるため、フォルダ名は同じにします。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-50-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/89ef3af3-344a-cf77-c781-7afd2770b5c6.png)

ローカルGitリポジトリの「Accounting」を入力し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-53-0_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/f8209cb8-90d1-3256-c2e6-2892465f8646.png)

Accounting ＞ リポジトリ ＞ ロールアウト ＞ 更新元を選択し、登録するジョブ定義を選択し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-56-37_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/012e9ad5-cfb3-45a3-4174-fce3f51bb183.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-13-30_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/4bc8475b-0598-64ac-0af9-6c9d31e6e8c0.png)

**（３）本番環境へのジョブ定義の配置**

ロールアウトしたジョブ定義を配置します。
ジョブ定義 ＞ Accountingの順で移動し、ジョブ定義を配置します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-3-32_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/7e2072f0-6819-2fd5-0f62-dc9554f5528d.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-3-39_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/4c189fcb-a95c-6f80-8c57-766ee5ef44cf.png)

ジョブ定義の配置後、ワークフローの画面にてロールアウトしたジョブ定義が配置されたことを確認できます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-5-35_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/49f496b3-3d7c-bb77-072c-3ce624b82179.png)

### ７－２．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けずに使用）

**（１）本番環境へGitリポジトリのクローン**

本番環境のJOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからジョブ定義 に移動し、
「/」を選択し、新規 ＞ 新規フォルダー を選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-3-13_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/53a1e84b-3279-4773-20a5-15cf1da664d2.png)

ローカルリポジトリにクローンするリポジトリの情報を登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-4-34_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/fd50d399-0d59-bd91-87ec-05e06aa466e6.png)

Git URI：上記のGitHubで作成したリポジトリのURLを指定
フォルダー名：Accounting

登録後、以下の画面のように表示され、エラーが発生しないことを確認します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-6-59_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/65553728-2a32-2341-5817-e3e00bd9d3c7.png)

**（２）本番環境へのジョブ定義の登録**

Accounting ＞ リポジトリ ＞ ロールアウト ＞ 更新元を選択し、登録するジョブ定義を選択し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_16-56-37_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/012e9ad5-cfb3-45a3-4174-fce3f51bb183.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-13-30_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/4bc8475b-0598-64ac-0af9-6c9d31e6e8c0.png)

**（３）本番環境へのジョブ定義の配置**

ロールアウトしたジョブ定義を配置します。
ジョブ定義 ＞ Accountingの順で移動し、ジョブ定義を配置します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-3-32_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/7e2072f0-6819-2fd5-0f62-dc9554f5528d.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-3-39_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/4c189fcb-a95c-6f80-8c57-766ee5ef44cf.png)

ジョブ定義の配置後、ワークフローの画面にてロールアウトしたジョブ定義が配置されたことを確認できます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-5-35_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/49f496b3-3d7c-bb77-072c-3ce624b82179.png)


# ８．開発環境ジョブ定義の更新

開発環境で作成した「Accounting/HelloWorld/job/HelloWorldRunningLog」に更新を行い、本番環境へのロールアウトを行う方法を本手順にて記載します。
※「Accounting/HelloWorld/job/HelloWorldRunningLog」は何らかの更新を行ったものとします。

「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ ＞ ロールアウト ＞削除元 を選択し、ローカルリポジトリを削除します。
※この手順は必須ではありませんが、JOCコックピットインベントリで削除または名前変更されたオブジェクトをスケジュールする場合は、一貫性を保つのに役立ちます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_11-50-38_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/51d9795e-fa99-7ada-5308-b6cae651a28c.png)

ローカルのGitリポジトリに登録されているすべてのジョブ定義を選択し、削除します。
※最上位ディレクトリの「Accounting」を選択すると、「/opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting」ディレクトリにある「.git」まで削除され、再度クローンを行わないといけなくなるため除外します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-34-43_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/72e23039-d1bb-7ae6-05f5-28309125dcbd.png)


**（１）開発環境ジョブ定義ファイルの更新**

本手順は**開発環境**のJobSchedulerサーバより実行します。

開発環境のJOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリに更新したジョブ定義ファイルを選択します。

更新したジョブ定義をローカルのGitリポジトリに登録します。
「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ ＞ ロールアウト ＞ 保存先 を選択します。
**ジョブ定義ファイル更新後、必ず保存を行いローカルのGitリポジトリに保存します。**
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-40-39_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/92786062-bdf6-8864-9e0d-0d9261207373.png)

ローカルのGitリポジトリに登録するジョブ定義を選択し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-41-55_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/f602dec7-3096-b1c7-3b6e-ebb7ae806071.png)

**（２）開発環境GitHubのリポジトリの更新**

JOCのWebUIより、「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ ＞ ロールアウト ＞ Git ＞　プッシュを選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-43-11_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/dcbcf565-e0e5-d059-110a-628f42ccf306.png)

コメントを入力し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-44-8_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/ca85c19a-282b-5481-eb69-e336a284977f.png)

以下のような画面が表示され、エラーが発生しないことを確認します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-45-12_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/deae9e2d-ddcf-97eb-c2d3-cd0d5794f755.png)


# ９．開発環境で更新したジョブ定義を本番環境へのロールアウト

本手順では、**７．本番環境への新規ジョブ定義ファイルのロールアウト**で行ったように、以下の2通りの更新方法を記載します。

- ブランチを使用して、開発環境用と、本番環境用のリポジトリを分けて管理
    - ９－１．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けて管理）を参照してください
- 開発環境用と、本番環境用リポジトリを分けずに使用
    - ９ー２．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けずに使用）を参照してください。

### ９－１．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けて管理）

上記の手順で開発環境からGitHubへコミットした更新したジョブ定義ファイルを本番環境へロールアウトします。
本手順は本番環境のJobSchedulerサーバより実行します。
※JobSchedulerサーバよりgitコマンドを使用して登録を行います。

```shell-session
$ cd /opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting
# 開発環境のリポジトリをリモートリポジトリとして追加
$ git remote add oldrepo git@github.com:Yoshitami-Y/js7.git
# リポジトリのコミットを取得
$ git remote update
# コミットIDの確認
$ git log --all --oneline --graph --decorate
* ca929d9 (origin/main, oldrepo/main) JOB UPDATE
* 44292d6 New job add
* 2af70b7 first commit
* ada2c71 (HEAD, origin/master, oldrepo/master, master) New job add
# 開発環境のリポジトリから本番環境のローカルのGitリポジトリにコミットするＩＤを選択
$ git cherry-pick ca929d9 
# 本番環境のリポジトリ（master）にプッシュ
$ git push origin master
# 開発環境のリポジトリへの参照を削除
$ git remote remove oldrepo
```

本番環境のJOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリからロールアウトする更新したジョブ定義ファイルを選択します。

更新するジョブ定義の最上位ディレクトリを選択し、リポジトリ ＞ ロールアウト ＞ 更新元 を選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-52-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/97f1ac04-cefe-8134-816a-f2fc6a99e658.png)

ロールアウトする更新したジョブ定義ファイルを選択し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-52-40_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/135136aa-921a-77fb-8b38-e768d37cbcf8.png)

登録後、再度ジョブ定義を配置します。

### ９ー２．本番環境へのロールアウトの手順（開発/本番環境用のリポジトリを分けずに使用）

ローカルのGitリポジトリに変更をプルします。

本番環境のJOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからジョブ定義 に移動し、
Accounting ＞ リポジトリ ＞ ロールアウト ＞ Git ＞ プルを選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-34-33_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/2cb83679-6cda-872c-729e-06655ac1d15f.png)

以下の画面のようにエラーが発生しないことを確認します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-27_15-34-42_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/676fa2d4-d4d9-691d-2093-fc20077c47e4.png)

JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリからロールアウトする更新したジョブ定義ファイルを選択します。

更新するジョブ定義の最上位ディレクトリを選択し、リポジトリ ＞ ロールアウト ＞ 更新元 を選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-52-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/97f1ac04-cefe-8134-816a-f2fc6a99e658.png)


ロールアウトする更新したジョブ定義ファイルを選択し、登録します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-4-21_17-52-40_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/135136aa-921a-77fb-8b38-e768d37cbcf8.png)

登録後、再度ジョブ定義を配置します。