LoginSignup
0
0

More than 3 years have passed since last update.

[rundeck]job1の結果をjob2で使う(値を引き継がせる)

Last updated at Posted at 2019-12-10

2.9.0 以降のRundeckではWorkflow対応しているのですが、それ以前のRundeckでは値を次のjobに引き継がせるのは不可能です。 ( 2.9.0以降のやり方

なので、job1の結果を保持しjob2を実行するjob3というShellを作成する方法をとりました。
rundeck-cliを使っているので、こちらのコマンドはインストールしておいてください。 ( 公式のインストール方法

#!/bin/bash
JOB1_RESULT_IDS=`rd run -f -j job1 | tail -n 1`
rd run -f -j job2 -- -IDS $JOB1_RESULT_IDS

exit 0
  • rd run : rundeckのjobを実行する
  • -f : 実行を出力
  • -j : jobをnameで指定。 groupがある場合は group/job名。環境変数 RD_PROJECT も必要です。(同じ名前のjobが別projectに存在する可能性があるので)
  • | tail -n 1 : 最後の行だけ取得
  • -- -IDS : Rundeck側のoption変数。この値でjob2に渡してあげます

| tail -n 1 をやっている理由として、rundeck-cliの実行結果はログのような形式で表示されるので、最後の1行に欲しい内容をechoしておけば取得できるためです。

job1の内容が以下だとして

#!/bin/bash
echo "1,2,3"

出力されるログはこんな感じになります

# Found matching job: UUID jobName 
# Execution started: [1] UUID /jobName <http://localhost:4440/project/mikeneko-test/execution/show/1>
1,2,3

欲しいのはラストの 1,2,3 なので、 tail -n 1 でここだけ取得しています。

このShellを使って2つのjobの実行管理と値の引き渡しを行います。
なので、Rundeck側でWorkflow機能を使ってスケジュール管理をする必要はありません。

エラーハンドリング

rd run コマンドは失敗すると 終了ステータス2 を返してくるのでこれでエラーキャッチします

#!/bin/bash
JOB1_RESULT_IDS=`rd run -f -j job1`

if [ ! $? = 0 ]; then
  echo error: job1
  exit 1
fi

IDS=`echo $JOB1_RESULT_IDS | awk '{print $NF}'`
rd run -f -j job2 -- -IDS $IDS

if [ ! $? = 0 ]; then
  echo error: job2
  exit 1
fi

exit 0
  • $? : 直前のコマンドの終了ステータスをキャッチします。
  • awk '{print $NF}' : awkで空白区切にして、一番ラストの要素を取得します。

最初の例だと、 | tail -n 1 で繋げてしまっている関係上、前のrdコマンドが失敗しても必ずここのtailコマンドで成功扱いになってエラーハンドリングができなかったので一旦切るようにしました。

この場合、 $JOB1_RESULT には空白区切で中身が入っているので awkで一番ラストの要素を引っ張り出すことで同じことが再現できます。

様々な理由でバージョン古くて困ってる人は試してもいいかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0