Jenkins Job DSL Plugin でいい感じに書くためのテクニック
素直に書いた場合は以下のようにそれぞれにジョブの定義を書くことになるが、共通化したい部分が出てくることがある。
最初にやったこと
単純にメソッドに抜き出した
これで実行すると、以下のエラーが出てジョブが作られない
ERROR: (script, line 8) No signature of method: script.description() is applicable for argument types: (java.lang.String) values: [ビルドします]
descriptionやlogRotatorなどはpipelineJobの中でしか使えないmethodなので、pipelineJobのオブジェクトを渡す必要があった。
https://stackoverflow.com/questions/27931795/how-to-refactor-common-jenkins-jobdsl-code
https://stackoverflow.com/questions/6305910/how-do-i-create-and-access-the-global-variables-in-groovy
動くようにしたもの
methodの引数にcontext(名前は何でもいい)を追加して、呼び出し元でclosureのdelegateプロパティを渡すことでclosure内のメソッドにアクセスできるようにした。
delegateはGroovyのclosureの中で使えるプロパティでthisのようなもの
http://docs.groovy-lang.org/latest/html/gapi/groovy/lang/Closure.html#getDelegate()