rundeck の API token を無期限で作成する
プログラム上から rundeck ジョブを実行するときなど、 rundeck の API token を作成しておくと何かと便利。 しかし、デフォルトでは API token は最長で30日期限のものしか作成できないので、無期限の token 作成方法をメモしておく。
rundeck API token の作成方法
- ユーザ名 -> profile からユーザAPI token 作成画面にいける
- default だと一番下の expiration が max 30days 亜でしか設定できない
無期限の API token を作成する
rundeck の可動サーバで、 設定ファイルに以下を追記して rundeck プロセスを再起動する * /etc/rundeck/rundeck-config.properties
rundeck.api.tokens.duration.max = 0
rundeck ジョブの実行ログの削除処理を仕込む
rundeck の実行ログは放置しておくとすごい勢いでたまってきて、DBデータや、ファイル領域を圧迫する原因になるため、 定期的に削除する処理を設定する必要がある。
出力される rundeck ログについて
rundeck ジョブは、ファイル形式で出力されるログと、rundeck DBのログ用テーブルにレコードとして追加されるタイプの二種類ある。
rundeck DB のログ記録用テーブルについて
- execution テーブルに、以下のようなレコードが1ジョブにつき1レコード追加されていく。
- output filepath に記載されているファイルが、実際の実行ログが記載されているファイルになる。
- このテーブルで、過去に実行したジョブと実行ログファイルとのマッピング等、実行ジョブのメタ情報が格納されているテーブルっぽい。
ファイル形式で出力するログについて
- rundeck の設定ファイル(/etc/rundeck/framework.properties)の framework.logs.dir で設定したパスに、ジョブの実際の実行ログがテキストファイルとして出力される。
- 各ジョブの「Log Output」タブで表示されるログの実ファイルとなる。
- 各プロジェクト下に自動生成されたジョブIDでディレクトリが作成され、その下に実行回数分のファイルが作成される。
- rundeck の設定ファイル(/etc/rundeck/framework.properties)の framework.logs.dir で設定したパスに、ジョブの実際の実行ログがテキストファイルとして出力される。
rundeck ログの削除について
上記のように二種類のログがジョブ実行回数分どんどんどんどん増えていくので、定期的に削除してあげる必要がある。
- execute テーブルのログレコード
- rundeck cli 削除コマンド実行で削除することが可能 (内部的には削除APIを実行している)。
- rundeck cli の色々なコマンドについて
- ファイル形式の実行ログ
- これは上記の削除コマンドでは消してくれないので手動で消す必要がある
実際の削除処理について
- ログのメタ情報削除
- rundeck cli コマンドを使用してメタ情報を削除
rd executions deletebulk -y -m <一度に削除する最大数> --older 3d -p <project名>
- ログ本体の削除
- サーバ上から find して直接削除
// ログ本体の配置場所 /var/lib/rundeck/logs/rundeck/<project名>/job/<job_id> // こんな感じで削除 find /var/lib/rundeck/logs/rundeck/<project名>/job/<job_id>/logs/ -mtime +3 -type f | xargs rm
まとめ
ということで、定期的にログ削除できるように、 rundeck で以下のようなシェルでログ削除ジョブを設定した\(^^)/ rundeck cli でいろいろできるから便利〜
set -e # 変数定義 export RD_HTTP_TIMEOUT=600 export RD_URL=http://localhost:4440 export RD_MAX_RETRIEVE_AT_ONCE=250 export RD_TOKEN=${RD_OPTION_RUNDECK_API_TOKEN} # プロジェクト毎の削除 del_executions() { local project=$1 echo "start ${project} at " `date` # 実行ログファイル削除 for jobid in $(rd jobs list -p ${project} --outformat "%group %id" | grep scheduled | awk '{print $2}'); do if [ -e "/var/lib/rundeck/logs/rundeck/${project}/job/${jobid}" ]; then echo file bulk deleting $jobid sudo find /var/lib/rundeck/logs/rundeck/${project}/job/${jobid}/logs -type f -mtime +1 -exec rm -f {} \; else echo skip $jobid fi done # 実行メタ情報削除 while true; do rd executions deletebulk -y -m ${RD_MAX_RETRIEVE_AT_ONCE} --older ${RD_OPTION_OLDER_THAN}d -p $project break sleep 1s done echo "end ${project} at " `date` } for p in $(rd projects list --outformat "%name"); do del_executions $p done exit 0
rundeck の SCM 設定のやり方
rundeck で各種ジョブを稼働させていくにあたって、今このジョブ設定が全て消えてしまったら困る!って思うよね。
そこで rundeck のジョブ設定を GitHub の専用リポジトリにバックアップする設定を行ったのでメモ。
SCM 設定手順
- ジョブバックアップする用のリポジトリを準備する
- 秘密鍵、公開鍵のセットを用意する
- ジョブ定義を保存するリポジトリの deploy key に公開鍵を登録しておく
- ssh/config を設定し、対象リポジトリへの接続は、対象のカギを使用するようにしておく
- identityfile 複数行かく場合、push 時は最初にマッチした鍵しかみてくれないので注意
- rundeck の対象プロジェクトで SCM 設定
- rundeck 稼働サーバで、ローカルブランチを scm 設定時に指定したブランチにスイッチしておく
// rundeck GUI 上で SCM 設定をすると以下ディレクトリが作成される $ cd /var/rundeck/projects/rundeckプロジェクト名/scm $ git branch -v $ git checkout -b rundeck_job_repo Switched to a new branch 'rundeck_job_repo'
7.ジョブをコミットする
まとめ
簡単なのでとくにメモするようなことじゃなかった。