tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Hudson CLI経由でジョブを追加したり変更したり削除したりする

なんかあれこれやってたらできた。
やり方が正しいかどうかは自信がない。

あと、初Groovy。

接続する

$ java -jar hudson-cli.jar -s http://localhost/ groovysh
Groovy Shell (1.6.0, JVM: 1.6.0_13)
Type 'help' or '\h' for help.
-------------------------------------------------------------------------------
groovy:000> import hudson.model.*;
===> [import hudson.model.*;]
groovy:000> hudson = Hudson.instance
===> hudson.model.Hudson@1af9e98

ジョブを作成してみる

groovy:000> import hudson.maven.*;
===> [import hudson.model.*;, import hudson.maven.*;]
groovy:000> hudson.createProject(MavenModuleSet.DESCRIPTOR, "hoge")
ERROR groovy.lang.MissingPropertyException: No such property: MavenModuleSet for class: groovysh_evaluate
        at groovysh_evaluate.run (groovysh_evaluate:3)
        ...

なんか怒られた。
MavenModuleSetが見つからないらしい。


いったん諦めて、ジョブをコピーしてみる

groovy:000> baseJob = hudson.getItem("BaseJob")
===> hudson.maven.MavenModuleSet@1c20de3[BaseJob]
groovy:000> copyJob = hudson.copy(baseJob, "CopyJob")
===> hudson.maven.MavenModuleSet@1a9b093[CopyJob]

できた。

ビルド・トリガの設定を変更してみる

groovy:000> import hudson.triggers.*;
===> [import hudson.model.*;, import hudson.maven.*;, import hudson.triggers.*;]
groovy:000> copyJob.addTrigger(new SCMTrigger("0 0 * * *"))
===> null

Subversionの設定を変更してみる

groovy:000> import hudson.scm.*;
===> [import hudson.model.*;, import hudson.triggers.*;, import hudson.maven.*;, import hudson.scm.*;]
groovy:000> scm = new SubversionSCM("http://localhost/svn/hoge")
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_evaluate: 6: You cannot create an instance from the abstract class 'hudson.scm.SCM'.
 @ line 6, column 7.
1 error

        at java_lang_Runnable$run.call (Unknown Source)
        at hudson.cli.GroovyshCommand.main (GroovyshCommand.java:64)
        at hudson.model.Hudson$CliManager.main (Hudson.java:2756)
        at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform (RemoteInvocationHandler.java:264)
        at hudson.remoting.RemoteInvocationHandler$RPCRequest.call (RemoteInvocationHandler.java:245)
        at hudson.remoting.RemoteInvocationHandler$RPCRequest.call (RemoteInvocationHandler.java:205)
        at hudson.remoting.UserRequest.perform (UserRequest.java:103)
        at hudson.remoting.UserRequest.perform (UserRequest.java:47)
        at hudson.remoting.Request$2.run (Request.java:236)

む、またしてもエラー。
copyJob.getScm()で取得できるクラスなのになぁ。。。

ふと、今あるインスタンスから新しいインスタンスを作ってみる

groovy:000> scm = copyJob.getScm().class.newInstance("http://localhost/svn/hoge")
===> hudson.scm.SubversionSCM@e7630
groovy:000> copyJob.setScm(scm)
===> null

できた。なんでだろ?

ということは…

groovy:000> createJob = hudson.createProject(copyJob.class.DESCRIPTOR, "fuga")
===> hudson.maven.MavenModuleSet@1d7cf67[fuga]

こっちもできた。

そして削除してみる

groovy:000> hudson.deleteJob(createJob)
===> null

よかったよかった。