RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

Rundeckをインストールして"最速"でJOB実行してみる

こんにちは。
インフラエンジニアをしていますknmriiです。
今回はジョブ管理ツール「Rundeck」の紹介とインストール方法、簡単な使用方法を紹介していきます。
最速でRundeckジョブのテスト実行ができるような記事構成にしていきたいと思いますのでぜひお試し下さい。
インフラエンジニアの皆様にとって、作業自動化の助けになれば幸いです。

Rundeck

Rundeckとは

OSSのジョブ管理ツールです。
以下のような特徴があります。

  • コミュニティ版を無料で利用可能
  • ssh経由でJOBを実行できるツール
  • エージェントレス
  • コマンドやスクリプトの実行が可能
  • JOBデータのgit管理可能
  • 管理対象のサーバを登録可能 タグ管理可能
  • 定期実行可能(cron表記もOK)

公式サイトはこちら

システム要件を確認

Rundeckサーバのシステム要件が以下になります。

OS

Java

  • Java 8 もしくは 11

CPU

  • 2 CPUs
  • 2 CPUs per instance

RAM

  • 4 GB RAM
  • 4GB for the JVM instance

Storage

  • 20 GB hard disk

Database

Log store

  • File system
  • S3 compatible object store

Amazon EC2の場合

  • m3.medium以上
    • ただし接続対象が100ホストを超える場合はm3.xlarge 以上のインスタンスサイズが必要

Webアクセス用ブラウザ

  • Mozilla Firefox or Google Chrome
    • その他の HTML5 準拠の Web ブラウザも動作する可能性がありますが、完全にはテストまたはサポートされていません。

必要なリソースはそこまで大きくないことが分かりますね。
どの環境でも立てることができるスペックかなと思います。

Rundeckをサーバにインストールしてみる

早速Rundeckサーバを構築して行きます。
公式ドキュメントはこちらです。
記事の情報が古くなって機能しなくなった場合も、上記公式ドキュメントを参照してください。
なお、今回はRedHat系OSにCommunity版をインストールしていきます。

事前にJavaをインストール

Javaのインストール方法はいろいろとありますので割愛します。
今回はJava8をインストールしました。

# java -version
openjdk version "1.8.0_xxx"

Rundeckインストール

まずは、リポジトリファイルを追加します。
以下のようなリポジトリファイルを格納する、ディレクトリにファイルを作成します

/etc/yum.repos.d/rundeck.repo

[rundeck]
name=rundeck
baseurl=https://packages.rundeck.com/pagerduty/rundeck/rpm_any/rpm_any/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.rundeck.com/pagerduty/rundeck/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

念のため読込可能か確認してみましょう

# yum clean all
# yum repolist 
読み込んだプラグイン:fastestmirror, langpacks

Loading mirror speeds from cached hostfile
リポジトリー ID      リポジトリー名        状態
rundeck/x86_64      rundeck              331
repolist: 331

このような表記になればOKです。
そして、yumコマンドを使ってinstallしていきます。

# yum install rundeck
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ rundeck.noarch 0:4.6.1.20220914-1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================================================================================================================================================
 Package                                                アーキテクチャー                                      バージョン                                                        リポジトリー                                            容量
=============================================================================================================================================================================================================================================
インストール中:
 rundeck                                                noarch                                                4.6.1.20220914-1                                                  rundeck                                                253 M

トランザクションの要約
=============================================================================================================================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 253 M
インストール容量: 272 M
Is this ok [y/d/N]: y
Downloading packages:
rundeck-4.6.1.20220914-1.noarch.rpm                                                                                                                                                                                   | 253 MB  00:00:09     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : rundeck-4.6.1.20220914-1.noarch                                                                                                                                                                              1/1 
  検証中                  : rundeck-4.6.1.20220914-1.noarch                                                                                                                                                                              1/1 

インストール:
  rundeck.noarch 0:4.6.1.20220914-1                                                                                                                                                                                                          

完了しました!

以上でインストール作業自体は完了です。

Rundeckサーバの起動

それでは、インストールが完了したRundeckを起動してみましょう。
以下のようなコマンドで起動可能です。

# systemctl start rundeckd
# service rundeckd start 

起動したら状態を確認してみましょう。
activeになっていたらおそらく起動が完了しています。
RundeckサーバーにJavaのインストールを忘れていて起動しなかった話は、内緒です。

# systemctl status rundeckd
● rundeckd.service - SYSV: rundeckd, providing rundeckd
   Loaded: loaded (/etc/rc.d/init.d/rundeckd; bad; vendor preset: disabled)
   Active: active (running) since 金 2022-09-30 14:46:42 JST; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 9288 ExecStart=/etc/rc.d/init.d/rundeckd start (code=exited, status=0/SUCCESS)
 Main PID: 9296 (runuser)
   CGroup: /system.slice/rundeckd.service
           ‣ 9296 runuser -s /bin/bash -l rundeck -c java -Drundeck.jaaslogin=true            -Djava.security.auth.login.config=/etc/rundeck/jaas-loginmodule.conf            -Dloginmodule.name=RDpropertyfilelogin            -Drdeck.co...

Rundeckサーバのlogを確認し、以下のような文字が出ていたらアクセス可能になっているはずです。

# tail /var/log/rundeck/service.log
Grails application running at http://localhost:4440 in environment: production

ログインしてみる

初回起動時は、以下のようなURLでwebアクセス可能になっています。

◆ローカルにインストールした場合

http://localhost:4400/

ただし、アクセス用端末とRundeckサーバが別の場合は、上記ではアクセス出来ないので注意が必要です。
このように、設定ファイルを書き換えてサービスを再起動する必要があります。

# vim /etc/rundeck/rundeck-config.properties

grails.serverURL=http://localhost:4440
↓
grails.serverURL=http://{RundeckサーバのIPアドレスもしくはFQDN}:4440

# systemctl restart rundeckd

再起動が完了したら以下のようなURLを作成してアクセスします。

http://{RundeckサーバのIPアドレスもしくはFQDN}:4400/

プロジェクトを作成する

Create New Projectをクリックして、Project名や説明を入力します。
こちらの設定は後から細かく設定できますので、今回は全てRundeck_testPjとしておきます。
設定後、作成をクリックしてProjectの作成は完了です。

まずは、RundeckサーバのローカルでJOBを実行してみる

ジョブのタブ内に新しいジョブを作成というボタンがあるのでそこをクリックします。
今回のJOBはテスト用JOBなのでtestJobとしておきます。
ジョブ編集画面に入るので、今回はOptionsワークフローを触ってみます。

OptionsではJobに渡したい変数を作成することができます。
今回のテスト用JOBではtest_valueを作成してみました。
Optionsでは、リストから任意の値を選択させる設定や入力を強制する設定を入れることが可能です。

次に、実行する処理を作成します。
ワークフロースクリプトを選択するとスクリプト入力欄ができますのでこちらに処理を書いていきます。

#!/bin/bash

echo "コマンドの標準出力がログに残る"
echo $(uname -n)

echo "Optionsで設定した内容もスクリプト内で呼び出し可能です"
echo "@option.test_value@"

JOBの編集が完了したら、保存をクリックしましょう。
いよいよ実行可能なJOBが作成できました。

試しに実行してみます!
処理がうまくいけば以下のような画面になり、ログが出力されます。

コマンドの標準出力がログに残る
rundeck
Optionsで設定した内容もスクリプト内で呼び出し可能
TEST_VALUE!!!

Rundeckサーバのローカルで何か処理を動かしたい場合は、この方法でJOBを作成することで実行可能になります。

Rundeckサーバから別サーバにSSH経由でJOBを実行してみる

Rundeckサーバから別サーバへのJOB実行をするには、まずは接続先のノードの情報を登録する必要があります。
手段は複数ありますが、今回は一番簡単な読み込みファイルを作成して情報を書き込んでいく方法を紹介します。

PROJECT SETTINGEDIT NODEAdd a new Node Sourceと進みます。
ファイルの設定画面になるので

Format:resourceyaml
File Path:/var/lib/rundeck/projects/Rundeck_testPJ/resource.yaml (rundeckが読み込める適当なディレクトリを指定します)

を入力します。
また、Generateにチェックを入れると自動でファイルが作成されるので手間が減ります。
設定が完了したら保存をクリックし、Editを開くと先ほど作成したファイルが表示されるのでそのファイルのModifyをクリックします。
ファイルが編集できるようになっていますので、以下を追記します。

<remotenode>:
  nodename: remotenode
  hostname: remotenode
  osVersion: 3.10.0-1160.el7.x86_64
  osFamily: unix
  osArch: amd64
  description: remort server
  osName: Linux
  username: root
  tags: ''

追記をしたら保存します。
パスワードをRundeckに読み込ませてSSH接続させることも可能ですが、今回はより作業を簡易化するためRundeckサーバ → リモートノードにSSH鍵認証の設定をしておきました。

JOBの作成方法はローカルとほぼ同じです。
先ほど作成したRundeckサーバ上でローカル実行したJOBの実行対象を変更し、リモートノードで実行してみます。
JOB編集画面のNodesタブを開き、Dispatch to Nodesを選択します。
その後、ノードフィルターに先ほど追加したリモートノード名を入力し、マッチしたノードに登録したリモートノードが出現したことを確認して保存します。
これで設定は完了ですので、実行してみます。

コマンドの標準出力がログに残る
remotenode
Optionsで設定した内容もスクリプト内で呼び出し可能
TEST_VALUE!!!

ログが出力されました!

最後に

今回は、RundeckをインストールしてJOBのテスト実行をすることろまでを解説しました。
まだまだ紹介できていない機能が豊富にありますので、今後機会がありましたら第二弾の解説を作成したいと思います!
公式のドキュメントも丁寧にかかれていますので気になる方はそちらをご確認ください。
それではまたの機会に...


エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
20210916153018
https://career-recruit.rakus.co.jp/career_engineer/

カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.com

ラクスDevelopers登録フォーム
20220701175429
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/

イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!

◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.