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で入れます。

プロジェクト設定

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


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

Job設定

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

ジョブ名を入力し下に進むとステップの追加があるのでジョブの実行内容を記述します。
ステップはいろいろできますが今回はシンプルにコマンドを叩きます。

手動ですぐに実行


怒られた

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に追加して再度実行してみた


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

こちら参考にさせていただき以下を実行し、
rundeckユーザでsudoを使えるようにしてあげます。

$ sudo visudo
# Defaults !visiblepw
Defaults visiblepw

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

再度実行

実行成功しました。

ジョブオプション

重複実行

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は他にもたくさん機能があるそうなので少しずつキャッチアップする。

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