結論
できることはできるけど、Parameterized Trigger Plugin のようにお手軽ではない。
環境
- Mac OS X Yosemite
- Jenkins v1.596
ただのパラメータ付きビルド
パラメータ付きビルドは、↓のような感じでできました。
build job: 'job_name', parameters: [StringParameterValue('param_name', 'value')]
ドキュメントにはぱっと情報が見当たらず、テストコードでようやく使い方が分かりました...
https://github.com/jenkinsci/workflow-plugin/blob/master/aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/build/BuildTriggerStepTest.java#L146
Workflowジョブに設定したパラメータを引き継いで子ジョブをビルドする
できなくはない...
current_env = this.getProperty("env"). getEnvironment()
current_build = Jenkins.instance.getItemByFullName(current_env['JOB_NAME']).getBuildByNumber(current_env['BUILD_NUMBER'].toInteger())
current_params = current_build.getActions(ParametersAction.class). parameters[0]
params = []
current_params.each {
params.push(it.class.newInstance(it.name, it.value))
}
current_build = null
current_params = null
build job: 'job', parameters: params
ビルド中な自分自身のインスタンスを取得して、List<ParameterValue> を取ってくる。
- 01/20 修正
- 変数をそのままにしておくと、java.io.NotSerializableException が発生するのでnull代入しました。
悩みの種
さっくり実行時のParameterValueインスタンスを取得できない
this.getProperty("env").getEnvironment()
で取得できる値に、ジョブのパラメータは含まれない。
例えば↓のようなものが入っている。
{BUILD_DISPLAY_NAME=#35, BUILD_ID=2015-01-15_01-00-35, BUILD_NUMBER=35, BUILD_TAG=jenkins-workflow-sample-35, CLASSPATH=, HUDSON_HOME=/Users/yasuhiroki/.jenkins, HUDSON_SERVER_COOKIE=6030517cc6d72944, JENKINS_HOME=/Users/yasuhiroki/.jenkins, JENKINS_SERVER_COOKIE=6030517cc6d72944, JOB_NAME=workflow-sample}
this
は、WorkflowScript
クラスを指していて、使えるメソッドは↓の通り。
[__$swapInit, equals, evaluate, getBinding, getClass, getMetaClass, getProperty, hashCode, invokeMethod, main, notify, notifyAll, print, printf, println, run, setBinding, setMetaClass, setProperty, toString, wait]
パラメータの値だけなら、パラメータ名がそのまま変数になっているのだけれど、String型では子ジョブに渡せない。
とはいえ
一度、仕組みを作ってしまえば、Parameterized Trigger よりも自由にパラメータ付きビルドできそうですね。
補足
Parameterized Build Trigger Plugin そのものを、Workflow Pluginに対応させる予定があるようです。
急ぎでなければ待つか、置き換えできるように作っておくと良さそうです。
補足2 2015/10/04
どうやら 2015/09 に、Parameterized Build Trigger Plugin が、Workflow Pluginに対応していたようです。
https://issues.jenkins-ci.org/browse/JENKINS-26050
https://github.com/jenkinsci/workflow-plugin/commit/ad0ae293d06a22284930bf6bb4f7096b2f357771
どのように利用できるようになったのか試せていませんが...。