ジョブの最も基本的な特徴は、1 つまたは複数のコマンドをあるノードセットに対してまとめて実行できることにあります。コマンドシーケンス(連続したコマンド)は_ワークフロー_と呼ばれ、ワークフローの各ステップには、コマンド呼び出しが定義されています。
ジョブワークフローの各ステップは、ジョブの一覧画面またはジョブの編集フォームにてジョブの詳細として表示されます。
ワークフローはグラフィカルコンソールから、または XML or YAML ドキュメントをサーバーに読み込ませることで定義できます。
グラフィカルコンソールではステップの追加・編集・削除・順序の入れ替えが出来るようになっています。
テキスト形式でジョブを定義することを好むユーザは、2 つの定義方法を参照するといいでしょう:
グラフィカルコンソールの中でジョブを定義しておいて、そこから rd-jobs(1) Shell ツールが利用する定義ファイルをエクスポートすることも可能です。
ジョブ定義ファイルのエクスポートおよび、ジョブ定義ファイルのインポートを参照してください。
ワークフローの実行は、Keepgoing(続行)と Strategy(計画)という 2 種類の重要な設定によってコントロールされています。
Workflow controls
Keepgoing:これはあるステップにてエラーが起きた際どうするかをコントロールします:
デフォルトでは直ちに失敗となりますが、場合によっては実行を続けるよう設定することもできます。
Strategy: 実行順序のオーダーとノードへのコマンドディスパッチをコントロールします:
以下のイラストでは、2 つのノードに対して 3 つのステップがどのように進められるかを対比させています。
Node-oriented フローはこうなります:
1. NodeA step#1
2. " step#2
3. " step#3
4. NodeB step#1
5. " step#2
6. " step#3
Step-oriented フローはこうなります:
1. NodeA step#1
2. NodeB "
3. NodeA step#2
4. NodeB "
5. NodeA step#2
6. NodeB "
Node-oriented フローが一般的であることも踏まえて、あなたが自動化しているプロセスでどちらのフローを使うのが適切か決めることになります。
以下の章では、様々な種類のコマンドを呼び出す各ステップを 1 つのセットとして、どのようにワークフローを作るか説明します。
新しいジョブ定義を作る際、ワークフローのフォームはデフォルトの状態であり、ワークフローステップの定義はされていません。ワークフローのエディターで最初のステップの定義としてフォームにシェルコマンドを入力するようになっています。
Add a step
新しいステップを追加するには、ワークフローのエディターフォームの中の "Add a step" リンクを押すだけです。これで、どのような種類のワークフローステップを追加したいか選択するようダイアログが出ます。フォームの中を埋めたら、"Save" を押してシーケンスの中に保存します。"Cancel" を押すとフォームが閉じられ、シーケンスの変更は保存されません。
Workflow step types
新しいステップは、常にシーケンスの最後に加えられます。ステップの順番を管理するにはステップの順序を変更するを見てください。
この先のいくつかの章ではコマンドステップの各種類の詳細について説明します。
システムコマンドを呼び出すには、コマンドステップを使ってください。これはジョブを作る際のデフォルトのワークフロータイプです。リモートホストで実行したいコマンドを入力してください。
Command step type
これは dispatch
を使ってコマンドを呼びだすことに似ています:
dispatch [filter-options] -- command
入力されたシェルスクリプトを実行します。テキストフィールドからスクリプトに引数を渡すこともできます。
Script step type
これは dispatch
を用いてコマンドを呼びだすことに似ています:
dispatch [filter-options] --stdin -- args <<EOF
script content here
EOF
フィルタリングされたノードセットに対してのみローカルスクリプトを実行します。テキストフィールドにスクリプトへの引数を指定できます。
Script file step type
これは dispatch
を使ってスクリプトファイルを呼びだすことに似ています:
dispatch [filter-options] -s scriptfile -- args
URL からスクリプトをダウンロードし、フィルタリングされたノードセットに対してそれを実行します。テキストフィールドにスクリプトへの引数を指定できます。
Script URL step type
これは dispatch
を使ってスクリプト URL を呼びだすことに似ています:
dispatch [filter-options] -u URL -- args
URL には実行時に展開されるコンテキスト変数を入れることができます。
もう一つ保存されたジョブを呼ぶには、Job reference step(ジョブリファレンスステップ)を作成してください。ジョブの名前とそのジョブグループを入力します。
Job step type
ジョブリファレンスのフォームは保存されているジョブの中から選択しやす閲覧画面を提供します。"Choose A Job..." リンクを押し、希望するジョブを選んでください。
最後に、オプションが定義されたジョブならそれらをコマンドライン引数としてテキストフィールドに指定したり、現在のジョブへ入力オプションを渡すための変数として使うことができます。フォーマット:
-optname <value> -optname <value> ...
オプションを指定するためのフォーマットは run
コマンドラインツールにてオプションを指定する場合と全く同じです、オプションに対して変数を指定することもできます。例えば:
-opt1 something -opt2 ${option.opt2}
この例では、"opt1" オプションに対して、"something" をセットし、"opt2" オプションをトップレベルのジョブからジョブリファレンスに直接渡しています。
これは run を用いて他のジョブを呼ぶことに似ています:
run [filter-options] -j group/jobname -- -opt1 something -opt2 somethingelse
ジョブがオプションを必要としていて、それが指定されていない場合 "defalutValue" が定義されていればそれを使います。オプションが "defaultValue" を持っていない場合、必要なオプションが指定されていないということでジョブの実行は失敗します。
ジョブのアローアイコンをドラッグ & ドロップして好きな場所に移動することで各ステップの順番を編集できます。青い水平線バーは、ドラッグしているジョブがどこに置かれるか分かりやすくしてくれます。
Job step reorder
選択したジョブをドロップすると希望する位置に着き、ステップの順番が更新されます。
ステップの順番変更を元に戻したい場合は、各ステップの上にある "Undo" リンクを押してください。
"Redo" ボタンは最新の "Undo" によって元に戻したものを再度変更しなおします。
"Revert All Changes" ボタンを押すと、全ての変更を戻してオリジナルの状態に戻します。
一旦ワークフローステップが定義され順番が決められると、ワークフローを新規作成する場合は "Create" ボタン、既にあるワークフローの編集の場合は "Update" ボタンによって変更を保存できます。
あるジョブステップは実行される際、ジョブステップ自身にアクセス可能なある "context" 変数のセットを持っています。ジョブコンテキスト job
・ノードコンテキスト node
・オプションコンテキスト option
といったいくつかのコンテキスト変数があります。
ジョブコンテキスト変数:
job.name
: ジョブの名前job.group
: ジョブのグループjob.id
: ジョブの IDjob.execid
: 現在の実行 IDjob.username
: ジョブを実行しているユーザー名job.project
: プロジェクト名ノードコンテキスト変数:
node.name
: ジョブが実行されているノード名node.hostname
: ノードのホスト名node.username
: リモートユーザー名node.description
: ノードの説明node.tags
: カンマ区切りのタグnode.os-*
: ノードの OS 属性 : name
, version
, arch
, family
node.*
: ノードに定義されている全てのノード属性オプションコンテキスト変数は、option.NAME
として参照します(詳細については次のチャプターのジョブオプションを見てください。)
ジョブステップの中でコンテキスト変数を使う方法がいくつかあり、それぞれ文法が微妙に違います:
${ctx.name}
@ctx.name@
注 : インラインスクリプトコンテンツの変数展開は Script File ステップでは行えません。スクリプトファイルは実行時に変数展開されるわけではないからです。
$RD_CTX_NAME
環境変数用の文法では、文字が全て大文字になり、句読点がアンダースコアに置き換えられ、名前に接頭辞 RD_
が付きます。 注 : SSH サーバーに必要なことについては、管理者向けガイドの SSH チャプター リモートコマンドを通して環境変数を渡すを参照してください。
ここまでであなたはもうジョブワークフローがどういったものか、具体的にはワークフローの定義の仕方やどんなジョブステップを追加する事ができるかといったことを理解しています。
次のチャプターでは、Rundeck のジョブオプションの機能をカバーしていきます。