Help us understand the problem. What is going on with this article?

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

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で一番ラストの要素を引っ張り出すことで同じことが再現できます。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした