JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、オープンソースのジョブ管理システムです。
本書では、オンプレミスでの自動デプロイについて記載します。
詳細な情報については、以下をご覧下さい。
- ナレッジベース(英語) https://kb.sos-berlin.com/display/PKB/JS7
- 日本語紹介資料 https://www.ossl.co.jp/
- 日本JobSchedulerユーザーグループ https://sites.google.com/site/jobschedulerja/
- https://groups.google.com/forum/?hl=ja#!forum/jobscheduler-ja
- https://www.facebook.com/Jobscheduler-Japan-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97-594469610565511/timeline/
- JIRA(英語)
https://change.sos-berlin.com/secure/Dashboard.jspa - User Forum(英語) http://sourceforge.net/projects/jobscheduler/forums/forum/486122
- SOS社ホームページ http://www.sos-berlin.com
JS7® JobSchedulerの概要及びインストール方法については以下を参照ください
Dockerでのインストール手順 https://qiita.com/satoruf/items/360fee5293611433ed33
Windowsでのインストール手順 https://qiita.com/Yoshitami/items/6804584592956a483364
Linux/CLIでのインストール手順 https://qiita.com/satoruf/items/fa9846f4376d1a50a67e
Linux/インストールスクリプト手順 https://qiita.com/Yoshitami/items/c2bf066368b4c5cf486e
JS7® JobSchedulerクイックスタート https://qiita.com/satoruf/items/96f21ef25bcb35e47b21
1.オンプレミスでの自動デプロイについて
自動デプロイメントでは、ヘッドレス インストールおよびデプロイメント手順を使用して、JS7(JOC、Controller、Agent)のインストール、パッケージ化、およびデプロイを自動で実行します。
本書では、この自動デプロイのツールを使用して、ターゲットサーバへ、Agentをインストールする手順を記載します。
次の構成要素が自動デプロイに適用されます。
- Deployment Area: 自動デプロイメント環境
- Deployment Descriptor: JOC、Controller、Agentのどれをインストールを行うかを指定
- Deployment Packaging: インストーラスクリプトを使用してインストールを実行し、インストールディレクトリ、構成ディレクトリのパッケージを作成
- Deployment Workflow: ターゲットサーバにDeployment Packagingで作成したパッケージを自動的に転送および抽出
※上記の詳しい説明は、以下の各章にて記載します。
詳細は、以下をご参照ください。
2.JS7インストール環境
本手順は、JS7®の機能確認を目的とした検証環境のスタンドアロン構成構築の手順です。
実業務では使用しないで下さい。
デプロイメントサーバ:
・CentOS 8.5
・JS7 2.6.1 (Agentはschedulerユーザで実行)
・PostgreSQL 13.4
・openjdk 17.0.2
・SELinuxはDisabled、Firewalldは停止されていること
・スタンドアロン構成
・JOC、Controller、Agent(Agentはschedulerユーザで実行)、DBは同居
・パッケージをダウンロードするためインターネットへの接続が可能なこと
・ターゲットサーバへは、ssh接続、scpでのtarballパッケージの転送を行うため、接続可能なこと
・本書ではデプロイメントサーバのAgentはschedulerにて実行のため作業はすべてschedulerにて実施
・Deployment Workflowのジョブで、ターゲットサーバへデプロイする際に、デプロイサーバより実行するため、Agentがインストールされている必要がある
Agentをインストールするターゲットサーバ:
・CentOS 8.5
・JS7 2.6.1 (Agentのみインストール)
・PostgreSQL 13.4
・openjdk 17.0.2
・SELinuxはDisabled、Firewalldは停止されていること
・Agentは、スタンドアロン構成
・Agentは、新規インストール
・Agentの実行ユーザ:scheduler
3.作業準備
デプロイメントは、ssh、scpコマンドを使用して実行されます。
認証では、ユーザアカウントと秘密鍵の場所を指定する秘密鍵/公開鍵が使用されます。秘密鍵がid_rsaなどの既知の名前のいずれかに一致する場合、この設定は省略できます。
自動デプロイの場合、ユーザは、パスワードを使用せずに秘密鍵のみを使用してターゲットに接続できる必要があります。
(1)秘密鍵/公開鍵の生成
デプロイメントサーバにて秘密鍵を生成します。
※本書ではAgent実行のユーザは、schedulerユーザのためschedulerで実施します。
# su - scheduler
$ ssh-keygen -t rsa -f ossl_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ossl_rsa.
Your public key has been saved in ossl_rsa.pub.
The key fingerprint is:
SHA256:X3C1e4xEKx0h/s7COeFFPQHB23WbrUhhqjrQFXS4zHM scheduler@cent8
The key's randomart image is:
+---[RSA 3072]----+
| .... ooBo |
| o. .o* =+|
| o o.o+.O.B|
| * Eo.* Bo|
| . .S+ .o.=.o|
| . . .. +.*.. |
| . . . * o |
| o o |
| . |
+----[SHA256]-----+
上記の表示のように秘密鍵/公開鍵がschedulerユーザディレクトリ配下に作成されることを確認します。
秘密鍵:/home/scheduler/.ssh/ossl_rsa
公開鍵:/home/scheduler/.ssh/ossl_rsa.pub
(2)公開鍵の配置
JS7のインストールを行うターゲットサーバのJS7インストールユーザに公開鍵を配置します。
・デプロイメントサーバ
$ cat /home/scheduler/.ssh/ossl_rsa.pub
※上記のossl_rsa.pubの表示された内容をコピーします。
・Agentをインストールするターゲットサーバ
$ su - scheduler
$ cd .ssh/
$ vim authorized_keys
$ chmod 600 authorized_keys
※デプロイメントサーバでコピーしたossl_rsa.pubの内容を貼り付けます。
「authorized_keys」のパーミッションは600であることを確認します。
4.Deployment Area
Deployment Areaは以下の目的で使用されます
- 自動インストールとアップデート、デプロイメントパッケージングのスクリプト環境を保持します。
- JS7製品のデプロイメントのための設定ファイルと証明書(オプション)を保持します。
- JS7リリースやJOC、Controller、Agentなどの製品ごとのJS7インストールを保持します。
- JS7 リリースとターゲットホストごとに、デプロイメントパッケージのアーカイブを保持します。
Deployment Areaの詳しい説明は以下をご参照ください。
(1)Deployment Managementパッケージのダウンロード
以下からの作業はデプロイメントサーバにて行い、scheduler(Agent実行ユーザ)で作業します。
作業ディレクトリを作成します。
# su - scheduler
$ mkdir /home/scheduler/work
Deployment Managementのパッケージは、JS7リリースごとに提供されます。
以下のサイトより、対象の最新バージョンのパッケージをダウンロードします。
・ファイル名:
js7_deploy.tar.gz
・配置先:/home/scheduler/work
$ cd /home/scheduler/work
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_deploy.tar.gz
ダウンロードしたパッケージを解凍します。
$ cd /home/scheduler/work
$ tar zxvf js7_deploy.tar.gz
(2)環境スクリプトの修正
上記で解凍された、環境変数が定義されているファイルの「env.sh」をデプロイメントサーバの環境に合わせて修正します。
本書では、スクリプトの配置ディレクトリの「SCRIPT_HOME」と、javaのパス「JAVA_HOME」を修正します。
その他修正がある場合は、環境に合わせて修正を行います。
$ cd /home/scheduler/work/js7.deploy
$ vim env.sh
SCRIPT_HOME=${HOME}/work/js7.deploy ## 本スクリプトの場所を修正
DEP_ARCHIVE="${DEP_ARCHIVE:-$SCRIPT_HOME/archive}"
DEP_BIN="${DEP_BIN:-$SCRIPT_HOME/bin}"
DEP_CA="${DEP_CA:-$SCRIPT_HOME/ca}"
DEP_CONFIG="${DEP_CONFIG:-$SCRIPT_HOME/config}"
DEP_DESC="${DEP_DESC:-$SCRIPT_HOME/desc}"
DEP_RELEASE="${DEP_RELEASE:-$SCRIPT_HOME/release}"
DEP_WORK="${DEP_WORK:-$SCRIPT_HOME/work}"
JAVA_HOME="/usr/java/jdk-17.0.2" ## JAVAのパスを修正
PATH=${DEP_BIN}:${JAVA_HOME}/bin:${PATH}
export JAVA_HOME PATH DEP_ARCHIVE DEP_BIN DEP_CA DEP_CONFIG DEP_DESC DEP_RELEASE DEP_WORK
修正後、環境スクリプトを実行します。
$ cd /home/scheduler/work/js7.deploy
$ . ./env.sh
(3)JS7パッケージのダウンロード
ターゲットサーバへインストールする対象のパッケージをデプロイメントエリアスクリプト内のreleaseディレクトリに、配置します。
リリースバージョンがわかりやすいようにreleaseディレクトリの配下に、対象のリリースバージョンのディレクトリを作成します。
$ mkdir /home/scheduler/work/js7.deploy/release/2.6.1
以下のサイトよりパッケージをダウンロードします。
$ cd /home/scheduler/work/js7.deploy/release/2.6.1
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_install_agent.sh
5.Deployment Descriptor
Deployment Descriptorは以下の目的で使用されます。
- JOC、Controller、Agentのどれをインストールするかの指定
- どのターゲットサーバへインストールを行うのかを指定
- インストールディレクトリ等のインストールオプションの指定
- ポート等の設定オプションの指定
Deployment Descriptorは、JSON形式で記述します。
Deployment Descriptorは、JOC、Controller、Agentをインスタンスの要素ごとに個別に指定、もしくは、これらを組み合わせて指定することもできます。
詳細は、以下をご参照ください。
また、以下にサンプルが用意されております。
スタンドアロン構成サンプル:js7.deploy/desc/standalone/*.json
クラスタ構成サンプル:js7.deploy/desc/cluster/*.json
本書では、Agentをターゲットサーバへインストールする手順を記載します。
Agent Deployment DescriptorのJSON形式ファイルを作成し、各スキーマで、Agentのインストール先ターゲット、インストールディレクトリ、Angetのポート等のオプションを指定します。
$ cd /home/scheduler/work/js7.deploy/
$ vim desc/standalone/standalone-agent.descriptor.json
以下のように記載します。
{
"descriptor": {
"descriptorId": "standalone-agent",
"title": "Install or update Agent Standalone instance using HTTP connections",
"created": "2023-08-15"
},
"agents": {
"controllerRefs": [
{
"controllerId": "controller",
"members": [
{
"agentId": "agent_001",
"target": {
"connection": {
"host": "192.168.9.157",
"port": 22
},
"authentication": {
"method": "publickey",
"user": "scheduler",
"keyFile": "/home/scheduler/.ssh/ossl_rsa"
},
"packageLocation": "/tmp",
"execPre": "StopService",
"execPost": "StartService",
"makeService": true,
"serviceName": "agent_4445",
"homeOwner": "scheduler"
},
"media": {
"release": "2.6",
"tarball": "2.6/js7_agent_unix.2.6.1.tar.gz"
},
"installation": {
"home": "/opt/sos-berlin.com/js7/agent",
"homeOwner": "scheduler",
"httpPort": "4445",
"runUser" : "scheduler",
"javaHome": "/usr/java/jdk-17.0.2"
}
}
]
}
]
}
}
各スキーマの説明は以下になります。
- descriptor
- descriptorId(必須):Deployment Descriptorの識別子
- title:Descriptorの目的の説明
- created:descriptorの作成日
- agents
- controllerRefs
- controllerId(必須):Agentが所属するControllerIdを指定
- members
- agentId:AgentIdを指定
- controllerRefs
- agents.controllerRefs[].members[].target
- connection
- host(必須):Agentのデプロイ先のホスト情報
- port:SSH接続に使用するポート、デフォルト: 22
- authentication
- method(必須):認証方式を指定、publickeyを指定する必要があります
- user(必須):ターゲットサーバへの接続ユーザを指定
- keyFile(必須):ターゲットサーバに接続するユーザの秘密鍵ファイルへのパスを指定
- packageLocation(必須):ロールアウト中にデプロイしたtarballが保存されるターゲットサーバのパスを指定
- execPre:デプロイしたtarballの抽出が実行される前のにターゲットサーバで実行するコマンドを指定、本書では、サービスが動いていればStopServiceでサービスを停止するように指定
- execPost:デプロイしたtarballの抽出が実行された後にターゲットサーバで実行するコマンドを指定、本書では、サービスを起動するStartServiceを指定
- makeService:サービスの作成/更新を行うかを指定
- serviceName:作成するサービス名を指定(指定がない場合は、「js7_agent_XXXX.service」で作成)
- homeOwner:ホームディレクトリのオーナを指定
- connection
- agents.controllerRefs[].members[].media
- release(必須):リリース番号を指定
- tarball(必須):tarballのパスを指定(パスは相対パスで指定)
- agents.controllerRefs[].members[].installation
- home(必須):Agentのホームディレクトリを指定
- homeOwner:Agentのホームディレクトリのオーナを指定(指定がない場合は、userで指定したユーザを指定)
- httpPort:Agentのhttpポートを指定(指定がない場合は、4445ポートを使用)
- runUser:Agentのサービスの実行ユーザを指定(指定がない場合は、userで指定したユーザを指定)
- javaHome:javaのパスを指定(指定がない場合は、ターゲットホスト上のJAVA_HOME環境変数を使用)
上記の他、様々なスキーマがあります。詳細は以下をご参照下さい。
※本書ではターゲットサーバへAgentを新規インストール手順となってますが、スキーマの「release」、「tarball」の指定を変えることにより、本JSONファイルでのAgentのバージョンアップも可能です。
6.Deployment Packaging
Deployment Packagingは以下の目的で使用されます。
- デプロイメントサーバの「js7.deploy/work」ディレクトリにJOC、Controller、Agent等を一時的にインストール
- インストール時に作成された、JS7のインストトールディレクトリ、設定ディレクトリを「js7.deploy/archive」ディレクトリにtarballに固めてDeployment Packagesを作成
詳細は、以下をご参照ください。
Deployment Descriptorの設定が完了したら、次にPackagingを行います。
Packagingでは、デプロイメントサーバの「js7.deploy/work」ディレクトリにJOC、Controller、Agent等を一時的にインストールします。
インストール時に作成された、JS7のインストトールディレクトリ、設定ディレクトリを「js7.deploy/archive」ディレクトリにtarballに固めてDeployment Packagesを作成します。
$ cd /home/scheduler/work/js7.deploy/
$ ${DEP_BIN}/js7_create_deployment_package.sh \
--deploy-desc=${DEP_DESC}/standalone/standalone-agent.descriptor.json \
--make-dirs
上記のスクリプト実行後、ターゲットサーバへインストールするAgentのインストールディレクトリ、設定ディレクトリ等が「js7.deploy/archive」ディレクトリにtarballにPackagesされ作成されます。
$ ls -1 /home/scheduler/work/js7.deploy/archive/standalone-agent/agents/agent_001/
js7_deploy_agent_unix.agent_001.2.6.1.install.tar.gz
run_deploy_agent.sh
run_install_agent.sh
run_rollout_agent.sh
・js7_deploy_agent_unix.agent_001.2.6.1.install.tar.gz:Agentのインストールディレクトリ、設定ディレクトリ等をパッケージしたtarball
・run_rollout_agent.sh:パッケージをターゲットサーバに転送し、デプロイメントスクリプトを実行するために使用されるロールアウトスクリプト
・run_install_agent.sh:Agentのインストールをパラメータ化するインストーララッパースクリプト
・run_deploy_agent.sh:ターゲットサーバ上でパッケージを抽出するために使用される展開スクリプト
7.Deployment Workflow
Deployment Workflowは以下の目的で使用されます。
- JOC、Controller、Agentのインスタンスに対して、Deployment PackageごとにDeployment Scriptsを実行
- Deploymentパッケージのtarballをターゲットサーバに転送
- ターゲットサーバでtarボールを展開します
- JS7の自動スタートアップとシャットダウン等のsystemdサービスの管理
詳細は、以下をご参照ください。
7-1.デプロイメントワークフローを使用してのデプロイ実行
本手順は、ワークフローを使用して、インストールするため、JOC、Controller、Agentがすでにインストール済みの場合に実施することができます。
JOC、Controller、Agentが存在しない場合は、本手順は実行できないため、以下の7-2.スクリプトを使用してのデプロイ実行をご参照ください
(1)デプロイメントワークフローのインポート
デプロイメントワークフローは、上記のDeployment Packagesで作成した、「js7.deploy/archive」ディレクトリ内に作成されます。
本書では、以下に作成されます。
デプロイメントワークフローインポートファイル:/home/scheduler/work/js7.deploy/archive/standalone-agent/js7_import.tar.gz
上記のファイルを作業端末にダウンロードします。
ダウンロードしたワークフローをJOC CockpitのWebUIより登録します。
JOCのWebUI
http://<JOCのIPアドレス>:4446
にブラウザよりログインし、ジョブ定義に移動し、インポートを選択し、先ほどダウンロードしたファイル「js7_import.tar.gz」をインポートします。
本書では、インポート先ディレクトリは「/Deployment」とします。
※インポート先のディレクトリが存在しない場合は、自動で作成されます。
ジョブ定義よりDeployment > standalone-agent > ワークフロー > standalone-agentの順で移動し、
エージェントを修正し、配置します。
エージェントは、デプロイメントサーバのAngetを指定します。
ジョブ定義よりDeployment > standalone-agent > 実行計画 > スケジュール > standalone-agentの順で移動し、
スケジュールをリリースします。
(2)デプロイメントワークフローの実行
インポートが完了したら、ワークフローを実行し、ターゲットサーバへAgentをデプロイします。
JOCより、ワークフローに移動し、オーダを追加します。
オーダ追加より、スケジュールから変数設定を選択し、standalone-agentのスケジュールを選択します。
jobの変数の値が、自動で入力されたことを確認し、登録を選択し、オーダを実行します。
実行後、オーダ履歴のステータスがエラーなく「完了」になっていることを確認します。
ターゲットサーバへsshログインし、Agentの起動状態を確認します。
※以下の作業は、Agentをインストールしたターゲットサーバにて実施
# systemctl status agent_4445.service
● agent_4445.service - SOS JS7 Agent -port=4445
Loaded: loaded (/usr/lib/systemd/system/agent_4445.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-08-24 02:52:48 EDT; 2min 38s ago
※サービスがActiveで起動していることを確認する
(3)Agentの登録
Agentの登録は、上記でダウンロードした、「js7_import.tar.gz」内にエキスポートされているため、このファイルをインポートして登録します。
JOCのWebUI
http://<JOCのIPアドレス>:4446
にブラウザよりログインし、設定 > コントローラ/エージェント管理の順で移動し、エージェント設定インポートを選択します。
上記でダウンロードした、「js7_import.tar.gz」を選択し、インポートします。
インポート後、配置します。
リソースに移動し、デプロイしたターゲットサーバのAgentのステータスが「接続」になっていることを確認します。
7-2.スクリプトを使用してのデプロイ実行
本手順は、スクリプトを直接実行してインストールするため、JOC、Controller、Agentがインストールしていない場合は、上記の7-1.デプロイメントワークフローを使用してのデプロイ実行は実行できないため、本手順にて実行します。
(1)スクリプトの実行
上記の7-1.デプロイメントワークフローを使用してのデプロイ実行を使用せずに、デプロイメントサーバより、直接ロールアウトスクリプトを実行することにより、JOCよりワークフローを使用せずに、ターゲットサーバへデプロイすることができます。
デプロイサーバにsshログインし、以下のスクリプトを実行します。
$ cd /home/scheduler/work/js7.deploy
$ . ./env.sh
$ ${DEP_ARCHIVE}/standalone-agent/run_rollout.sh
ターゲットサーバへsshログインし、Agentの起動状態を確認します。
※以下の作業は、Agentをインストールしたターゲットサーバにて実施
# systemctl status agent_4445.service
● agent_4445.service - SOS JS7 Agent -port=4445
Loaded: loaded (/usr/lib/systemd/system/agent_4445.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-08-24 01:02:08 EDT; 54s ago
※サービスがActiveで起動していることを確認する
(2)Agentの登録
ターゲットサーバにAgentがインストールされたことを確認後に、JOCにログインし、Agentの登録を行います。
8.備考
本書では、Agentのスタンドアロン構成のインストールを行いましたが、このスクリプトを使用することにより、JOC、Controllerのインストールも行え、また、有償ライセンスが必要となりますが、クラスタリング構成のJOC、Controller、Agentをインストールすることができます。
※有償ライセンスは、クラスタリング構成を行う際に必要となります。本スクリプト自体は、ライセンスの必要はありません。
詳細は以下をご参照ください。