Jenkins でパラメータを渡す場合、下流のジョブへはパラメータを簡単に渡すことができますが、下流で変更されたパラメータを上流へ反映させることは難しいと思います。
今回は Scriptler を使って上流へパラメータを渡す方法を紹介します。
Scriptler プラグインをインストールする
今回利用するプラグインをインストールします。
グローバルプロパティを設定する
グローバルプロパティはジョブを超えて同じ値を参照するのに使えるプロパティです。通常ここは読み取り専用ですが、これを書き換えられるようにすることで今回の課題を解決します。
スクリプトを作成する
グローバルプロパティ編集用のスクリプトを作成します。
スクリプトはこちらを参考にしました。
import jenkins.* import jenkins.model.* import hudson.* import hudson.model.* nodes = Jenkins.getInstance().getGlobalNodeProperties() nodes.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class) if ( nodes.size() != 1 ) { println("error: unexpected number of environment variable containers: " + nodes.size() + " expected: 1") } else { envVars= nodes.get(0).getEnvVars() envVars.put("$key", "$value") Jenkins.getInstance().save() println("$key : $value") }
テストジョブを作る
上流に相当するジョブを作ります。
echo $GLOBAL_KEY java -jar /var/lib/jenkins/jenkins-cli.jar -s http://localhost:8080/ build set_global_property -s echo $GLOBAL_KEY
下流のジョブを作る
ここで Scriptler を使って $GLOBAL_KEY を変更します。
wget --spider http://localhost:8080/scriptler/run/set_global_property.groovy?key=GLOBAL_KEY\&value=modified
後続のジョブを作る
$GLOBAL_KEY が変更されたことを確認します。
echo $GLOBAL_KEY
実行してみる
上流の結果
内部で Scriptler を呼び出しました。呼び出しの前後で $GLOBAL_KEY が当初の値のままです。
下流の結果
$GLOBAL_KEYを "modified" へ変更しました。
変更された結果を確認する
$GLOBAL_KEY が変更されました。
グローバルプロパティが変更されていることを確認する
Scriptler によって値が更新されました。
いかがでしたでしょうか?
値の受け渡しで困った際にご利用ください。
それでは!