vagrant
rundeck

Rundeckでとりあえずjobを起動するとこまでのまとめ


はじめに

Rundeckのエントリーはいくつかあると思いますがちょいちょいハマりつつ色んな記事の色んな箇所を参考にさせていただいたので個人的なメモ用に。

とりあえず環境作ってジョブを実行するところまで。


環境

Vagrant / centOS7


Vagrantfile

動作環境に使ったVagrantfileです

Vagrant.configure(2) do |config|

config.vm.box = "bento/centos-7.5"

config.vm.define "rundeck" do |c|
c.vm.hostname = "rundeck"
c.vm.network "private_network", ip: "192.168.33.10"
c.vm.network "forwarded_port", guest: 4440, host: 4440
c.vm.synced_folder "./job", "/home/rundeck/job", create:true
end
end

Vagrantfileが置いてあるディレクトリにjobディレクトリを作成し、起動したいjobを入れておく。  

これらを叩くように後でrundeckで設定。


サンプル

https://github.com/ohanamisan/Rundeck_on_Vagrant/tree/master

下記の動作一連をvagrant up時にまとめてやってくれるよう上記のVagrantfileを少し編集してます。


手順


Vagrantに入る

表現あってますかね?Vagrantに入ります。

$ vagrant up

$ vagrant ssh


Vagrantで困ったこと

起動時にマウントのエラーが出てました。

Vagrant was unable to mount VirtualBox shared folders. This is usually

because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

さっぱりわからなかったのですがこちらを参考にさせていただき以下のコマンドをvagrant内で叩きました。

$ sudo yum -y update kernel

$ sudo yum -y install kernel-devel kernel-headers dkms gcc gcc-c++

ホスト側で vagrant reload をするとちゃんとマウントされました。

今回はRundeckメインに取り上げるのでこれ以上はとりあえず深堀せず先に行きます。


Javaを入れておく

$ sudo yum install -y java-1.8.0-openjdk


yumでインストール

$ sudo yum install -y https://repo.rundeck.org/latest.rpm

$ sudo yum install -y rundeck


起動

$ sudo service rundeckd start


ステータス確認

$ sudo service rundeckd status

● rundeckd.service - SYSV: rundeckd, providing rundeckd

Loaded: loaded (/etc/rc.d/init.d/rundeckd; bad; vendor preset: disabled)
Active: active (running) since Thu 2018-12-27 09:28:57 JST; 2min 48s ago
Docs: man:systemd-sysv-generator(8)
Process: 734 ExecStart=/etc/rc.d/init.d/rundeckd start (code=exited, status=0/SUCCESS)
Main PID: 748 (runuser)
CGroup: /system.slice/rundeckd.service
‣ 748 runuser -s /bin/bash -l rundeck -c java -Drundeck.jaaslogin=true -Djava.security.auth.log...

こんなのが出てればおけーです。


接続

4440ポートで接続ができる

http://localhost:4440/

接続するとログインページにつながります。

初回はユーザ:admin, パスワード:adminで入れます。

初回ログイン.PNG


プロジェクト設定

ログインすると以下のページが出てくるので[新しいプロジェクト]をクリックします。


初回起動時.PNG

今回はプロジェクトの細かい設定は行わず、ProjectsNameだけ入力して完了します。

プロジェクト設定.PNG


Job設定

ジョブ欄から[新しいジョブを作成]をクリック。

ジョブ作成.PNG

ジョブ名を入力し下に進むとステップの追加があるのでジョブの実行内容を記述します。

ステップはいろいろできますが今回はシンプルにコマンドを叩きます。

ステップの設定.PNG


手動ですぐに実行

今すぐジョブを実行.PNG

怒られた

We trust you have received the usual lecture from the local System

Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified # <- 怪しい
Result: 1
Failed: NonZeroResultCode: Result code was 1


実行ユーザーを確認

whoamiをjobに追加して再度実行してみた

whoamiをjobに追加.PNG

job実行ユーザ確認.PNG

rundeckというユーザになってました。

こちら参考にさせていただき以下を実行し、

rundeckユーザでsudoを使えるようにしてあげます。

$ sudo visudo

# Defaults !visiblepw

Defaults visiblepw

root ALL=(ALL:ALL) ALL
rundeck ALL=(ALL) NOPASSWD:ALL

再度実行

成功.PNG

実行成功しました。


ジョブオプション


重複実行

Multiple Executions

Yesにすると重複実行が可能になる。

デフォルトはNoになっており、重複実行しようとすると実行されない。


定期実行・スケジュール設定

Schedule to run repeatedly?

デフォルトはNoになっており、定期実行の設定がされていない。

Yesにチェックすると時間の設定をSimpleとCrontabの2種類から選べる。

Simple

セレクターで時間を選んで毎日か毎月かのチェックをつける

Crontab

ほぼcron書式で書くことができる。

秒と年が指定できるように拡張されている。

秒 分 時 日 月 曜 年

0 30 7 * * ? *

必ず1つは[?]指定が必要。

Timeout

実行時間の制限を登録できる。

実行時間が設定時間を超えると失敗とみなされる

Retry

ジョブが失敗した場合や、タイムアウトした場合に発生。

その後の再試行する回数を設定できる。

Retry delay

失敗したジョブと再試行の間の時間。

秒単位の時間、もしくは時間単位を指定する。

時間単位の指定

120m, 2h, 3d


おわりに

上記のオプションなどでスケジューリングやタイムアウトの設定を行っていけばとりあえずはcronと同じように定期実行できそうです。

Rundeckは他にもたくさん機能があるそうなので少しずつキャッチアップする。


参考にさせて頂いたページ