JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、ジョブ管理システムです。
OSSジョブ管理ツールの定番JobSchedulerをリニューアルし、従来より耐障害性、大規模環境対応を強化し、ミッションクリティカルな要求に対応しました。
V.2.2.2よりGit連携機能のサポートが追加されました。
参考)
また、V.2.3.0より、JOCコックピットより、Git操作の機能が追加されました。
参考)
本書では、GitHubにデモ用リポジトリを作成し、開発環境のJS7で作成したジョブ定義をGitHubにコミットして、本番環境のJS7にロールアウトする方法を記載します。
参考)
-
LDAP連携機能を利用する際は以下の記事をご参照ください。
https://qiita.com/Yoshitami/items/d891936095b1877dd93d -
HashiCorp Vault®連携を利用する際は以下の記事をご参照ください。
https://qiita.com/Yoshitami/items/6920e747e512e6fa348b
1.前提条件
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のユーザ登録を行っていること
※ユーザ登録を行っていない場合は以下より登録を行います。
2.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
上記のオブジェクトは、開発環境/テスト環境/本番環境等のロールアウト環境全体に展開できます。
詳細は以下をご確認ください。
3.JS7インストール環境
●Jobschedulerサーバ(開発環境/本番環境ともに共通)
・CentOS 7.9
・PostgreSQL 13.5
・openjdk 11
・JS7 2.3.0
・JS7インストールユーザ:scheduler
・作業はすべてJS7インストールユーザのschedulerで実施
・SELinuxはDisabled、Firewalldは停止されていること
・gitコマンドがインストールされていること
※gitコマンドがインストールされていない場合は以下のコマンドでインストールします。
# yum install git
4.GitHub SSH接続手順
JobschedulerサーバからGitHubに接続する設定を行います。以下の作業は開発環境/本番環境ともに設定を行います。
(1)ユーザ情報の設定
初期設定を行います、GitHubにてユーザ登録した情報をもとに設定を行います。
※以下の作業よりすべてJS7インストールユーザ、本書では「scheduler」ユーザにて実施します。
# su - scheduler
$ git config --global user.name "<ユーザ名>"
$ git config --global user.email "<メールアドレス>"
$ git config --global push.default simple
ユーザ情報の確認を行います。
$ git config --list
user.name=<ユーザ名>
user.email=<メールアドレス>
push.default=simple
※上記のようにユーザ情報が表示されることを確認します。
(2)秘密鍵/公開鍵の生成
$ 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
(3)Gitのconfigファイルの作成
Gitクライアントは、次のファイルから構成アイテムを読み取ります。
- Unix環境:
- /home/<JS7インストールユーザ>/.ssh/config
- Windows環境:
- C:\Users\<JS7インストールユーザ>.ssh\config
configファイルは、特定の秘密鍵の使用をGitサーバでの認証にマップします。
秘密鍵/公開鍵を生成したディレクトリに「config」ファイルを作成し、以下の内容を記載します。
ファイル名:config
パス:/home/scheduler/.ssh
$ cd /home/scheduler/.ssh
$ vim config
※以下の内容を設定
Host github.com
Hostname github.com
IdentityFile /home/scheduler/.ssh/id_rsa
IdentitiesOnly yes
configファイルのパーミッションを変更します。
$ chmod 600 config
(4)GitHubへの公開鍵の登録
作成した公開鍵の内容を確認し、設定内容をコピーします。
ファイル名:id_rsa.pub
パス:/home/scheduler/.ssh
$ cd /home/scheduler/.ssh/id_rsa
$cat id_rsa.pub
※表示された内容をコピーします。
GitHubのURL、https://github.com にログインし、
GitHubのメニューの右上のアイコンから Settiongs > SSH and GPG keys > New SSH Key の順で移動します。
Titleに適当なものを記載し、上記でコピーした公開鍵をKeyの項目に貼り付け、「Add SSH Key」を選択し登録します。
(5)GitHubとの接続確認
GitHubとのSSH接続確認を行います。
以下のようにGitHubへのアクセスが成功してるメッセージが出力されることを確認します。
$ ssh -T git@github.com
Hi Yoshitami-Y! You've successfully authenticated, but GitHub does not provide shell access.
(6)JOCでのGitHub資格情報の登録
JOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューから、Root > プロファイル > Git管理 に移動し、GitHubに登録したアカウント情報を入力します。
Gitサーバ:github.com
Gitアカウント、ユーザ名、メールアドレス:<GitHubに登録している情報>
認証タイプ:キー
Git秘密鍵パス:<作成した秘密鍵を指定>
5.GitHub リポジトリの作成/接続手順
(1)リポジトリの作成
GitHubのURL、https://github.com にログインし、
GitHubのメニューの右上のアイコンから Your repositories で移動します。
適当なリポジトリ名を記載し、「Create repository」を選択します。
※本書ではリポジトリ名は「js7」とします。
(2)リポジトリの接続確認
リポジトリ作成後、開発環境のJobSchedulerサーバからリポジトリへ接続確認を行います。
$ 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コマンドを実行します。
$ git remote set-url origin git@github.com:<ユーザ名>/<リポジトリ名>.git
6.開発環境で作成した新規ジョブ定義ファイルをGitHubへのコミット
開発環境でジョブ定義を作成し、GitHubへコミットします。
本手順は開発環境のJobSchedulerサーバより実行します。
(1)ローカルGitリポジトリの設定
開発環境のJOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリの設定を行います。
「/」を選択し、リポジトリ > ロールアウト > Git > クローン の順で移動し、上記で作成したGitHubのリポジトリ情報を入力し、登録します。
※クローンで指定したフォルダは、存在しない場合は自動で作成されます。
Git URI:上記のGitHubで作成したリポジトリのURLを指定
フォルダー名:Accounting
※本書でのローカルGitリポジトリの最上位ディレクトリは「Accounting」とします。
登録後、以下の画面のように、エラーが発生しないことを確認します。
(2)ジョブ定義ファイルをローカルのGitリポジトリへ登録
JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリに登録するジョブ定義ファイルを選択します。
上記で作成した、ローカルのGitリポジトリ上にジョブ定義を作成します。
※本手順ではジョブ定義の作成は割愛します、ジョブ定義の作成は以下をご参照ください。
参考)
本書では作成済みの「Accounting/HelloWorld/job/HelloWorldRunningLog」を登録するものとします。
「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ > ロールアウト > 保存先 を選択します。
ローカルのGitリポジトリに登録するジョブ定義を選択し、登録します。
登録後、JobSchedulerサーバにて<JOCインストールディレクトリ>/jetty_base/resources/joc/repositories/rolloutディレクトリを確認すると、JOCのWebUIで登録したジョブ定義ファイルが追加されていることを確認できます。
※本書でのJOCインストールディレクトリは「/opt/sos-berlin.com/js7/joc」とします。
$ cd /opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting
$ ls HelloWorld/job/
HelloWorldRunningLog.workflow.json
(3)GitHubのリポジトリにコミット
JobSchedulerメニューからジョブ定義 に移動し、「Accounting」を選択し、リポジトリ > ロールアウト > Git > プッシュ を選択します。
登録後、以下のような画面が表示されエラーが発生していないことを確認します。
GitHubのURL、https://github.com にログインし、
GitHubのメニューから作成したリポジトリ「js7」に移動すると、「HelloWorld/job/
HelloWorldRunningLog.workflow.json」が登録されていることを確認できます。
7.本番環境への新規ジョブ定義ファイルのロールアウト
上記の手順で開発環境からGitHubへコミットした新規ジョブ定義ファイルを本番環境へロールアウトします。
本手順は本番環境のJobSchedulerサーバより実行します。
また、本手順では、ロールアウトの方法として、以下の2通りの方法を記載します。
- ブランチを使用して、開発環境用と、本番環境用のリポジトリを分けて管理
- 7-1.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けて管理)を参照してください
- 開発環境用と、本番環境用リポジトリを分けずに使用
- 7ー2.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けずに使用)を参照してください。
7-1.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けて管理)
本手順は、JobSchedulerサーバよりgitコマンドを使用して登録を行います。
(1)開発環境から本番環境のリポジトリにコピー
ローカルのGitリポジトリディレクトリに移動し、GitHubのリポジトリを追加します。
$ 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
開発環境のリポジトリをリモートリポジトリとして追加し、本番環境のリポジトリにプッシュします。
$ 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リポジトリにコミットするIDを選択
$ 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
(2)本番環境へのジョブ定義の登録
開発環境にて作成した新規ジョブ定義を本番環境のローカルのGitリポジトリにコピーしたため、本番環境へジョブ定義をロールアウトします。
本番環境のJOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューからジョブ定義 に移動し、
「/」を選択し、新規 > 新規フォルダー を選択します。
※ここで作成するフォルダは、上記のCLIにて作成した「/opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting」ディレクトリとマッピングされるため、フォルダ名は同じにします。
ローカルGitリポジトリの「Accounting」を入力し、登録します。
Accounting > リポジトリ > ロールアウト > 更新元を選択し、登録するジョブ定義を選択し、登録します。
(3)本番環境へのジョブ定義の配置
ロールアウトしたジョブ定義を配置します。
ジョブ定義 > Accountingの順で移動し、ジョブ定義を配置します。
ジョブ定義の配置後、ワークフローの画面にてロールアウトしたジョブ定義が配置されたことを確認できます。
7-2.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けずに使用)
(1)本番環境へGitリポジトリのクローン
本番環境のJOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューからジョブ定義 に移動し、
「/」を選択し、新規 > 新規フォルダー を選択します。
ローカルリポジトリにクローンするリポジトリの情報を登録します。
Git URI:上記のGitHubで作成したリポジトリのURLを指定
フォルダー名:Accounting
登録後、以下の画面のように表示され、エラーが発生しないことを確認します。
(2)本番環境へのジョブ定義の登録
Accounting > リポジトリ > ロールアウト > 更新元を選択し、登録するジョブ定義を選択し、登録します。
(3)本番環境へのジョブ定義の配置
ロールアウトしたジョブ定義を配置します。
ジョブ定義 > Accountingの順で移動し、ジョブ定義を配置します。
ジョブ定義の配置後、ワークフローの画面にてロールアウトしたジョブ定義が配置されたことを確認できます。
8.開発環境ジョブ定義の更新
開発環境で作成した「Accounting/HelloWorld/job/HelloWorldRunningLog」に更新を行い、本番環境へのロールアウトを行う方法を本手順にて記載します。
※「Accounting/HelloWorld/job/HelloWorldRunningLog」は何らかの更新を行ったものとします。
「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ > ロールアウト >削除元 を選択し、ローカルリポジトリを削除します。
※この手順は必須ではありませんが、JOCコックピットインベントリで削除または名前変更されたオブジェクトをスケジュールする場合は、一貫性を保つのに役立ちます。
ローカルのGitリポジトリに登録されているすべてのジョブ定義を選択し、削除します。
※最上位ディレクトリの「Accounting」を選択すると、「/opt/sos-berlin.com/js7/joc/jetty_base/resources/joc/repositories/rollout/Accounting」ディレクトリにある「.git」まで削除され、再度クローンを行わないといけなくなるため除外します。
(1)開発環境ジョブ定義ファイルの更新
本手順は開発環境のJobSchedulerサーバより実行します。
開発環境のJOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリに更新したジョブ定義ファイルを選択します。
更新したジョブ定義をローカルのGitリポジトリに登録します。
「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ > ロールアウト > 保存先 を選択します。
ジョブ定義ファイル更新後、必ず保存を行いローカルのGitリポジトリに保存します。
ローカルのGitリポジトリに登録するジョブ定義を選択し、登録します。
(2)開発環境GitHubのリポジトリの更新
JOCのWebUIより、「Accounting/HelloWorld/job/HelloWorldRunningLog」の最上位ディレクトリの「Accounting」を選択し、リポジトリ > ロールアウト > Git > プッシュを選択します。
以下のような画面が表示され、エラーが発生しないことを確認します。
9.開発環境で更新したジョブ定義を本番環境へのロールアウト
本手順では、7.本番環境への新規ジョブ定義ファイルのロールアウトで行ったように、以下の2通りの更新方法を記載します。
- ブランチを使用して、開発環境用と、本番環境用のリポジトリを分けて管理
- 9-1.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けて管理)を参照してください
- 開発環境用と、本番環境用リポジトリを分けずに使用
- 9ー2.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けずに使用)を参照してください。
9-1.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けて管理)
上記の手順で開発環境からGitHubへコミットした更新したジョブ定義ファイルを本番環境へロールアウトします。
本手順は本番環境のJobSchedulerサーバより実行します。
※JobSchedulerサーバよりgitコマンドを使用して登録を行います。
$ 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リポジトリにコミットするIDを選択
$ git cherry-pick ca929d9
# 本番環境のリポジトリ(master)にプッシュ
$ git push origin master
# 開発環境のリポジトリへの参照を削除
$ git remote remove oldrepo
本番環境のJOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリからロールアウトする更新したジョブ定義ファイルを選択します。
更新するジョブ定義の最上位ディレクトリを選択し、リポジトリ > ロールアウト > 更新元 を選択します。
ロールアウトする更新したジョブ定義ファイルを選択し、登録します。
登録後、再度ジョブ定義を配置します。
9ー2.本番環境へのロールアウトの手順(開発/本番環境用のリポジトリを分けずに使用)
ローカルのGitリポジトリに変更をプルします。
本番環境のJOCのWebUIにrootアカウントでログインし、
http://<IPアドレス>:4446
ユーザ:root
パスワード:root
JobSchedulerメニューからジョブ定義 に移動し、
Accounting > リポジトリ > ロールアウト > Git > プルを選択します。
JobSchedulerメニューからジョブ定義 に移動し、ローカルのGitリポジトリからロールアウトする更新したジョブ定義ファイルを選択します。
更新するジョブ定義の最上位ディレクトリを選択し、リポジトリ > ロールアウト > 更新元 を選択します。
ロールアウトする更新したジョブ定義ファイルを選択し、登録します。
登録後、再度ジョブ定義を配置します。