Hudson using Groovy  #jggug
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,843
On Slideshare
2,843
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
3
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. HudsonでGroovy 2010/12/09 @kimukou_26
  • 2. みなさん、Groovyスクリプトを書くとき 何使っていますか~ 自分はGroovyConsoleのWebStart版使ってます( http://d.hatena.ne.jp/bluepapa32/20101006/1286337869 ) ここをクリック
  • 3. インストールは手軽~1. ウインドウ閉じた時に記 述保持機能あるよ2. Grape やAntBuilderも問 題なしに使えます
  • 4. @kiy0taka さんのブログで[ groovyでsay読み上げ ]の話見て
  • 5. WindowsでGroovyConsole+ AquesTalk(音声再生dll)で 出来ないもんかな~ JNAを使って AquesTalkDa.dll を読込むgroovyコードGroovyClassLoaderを JNA 使って対象コードを 読むgroovyコード AquesTalkDa.dll
  • 6. ファイル構成(GConsole)LTHudson/standalone gcon_jnatest.groovy (UTF-8) AquesTalkByJNA.groovy (UTF-8) lib groovy-all-1.7.5.jar jna.jar platform.jar AquesTalkDa.dll dll/音声タイプ/AquesTalkDa.dll
  • 7. で、ソースとDLLの位置同じにして書いてみた <呼び元( gcon_jnatest.groovy )>String talk = "ゆっくり/していってね。したからくるぞ、きをつけろ"ClassLoader parent = ClassLoader.getSystemClassLoader()CompilerConfiguration config = new CompilerConfiguration([ sourceEncoding:UTF-8 //equals -Dgroovy.source.encoding=UTF-8])GroovyClassLoader loader = new GroovyClassLoader(parent,config)new File("$LIBPATH").eachFileRecurse{ loader.addURL it.toURL()}fname="$SRCPATH/AquesTalkByJNA.groovy"File fn = new File(fname)def source = new GroovyCodeSource(fn,"UTF-8") //equals -Dfile.encoding=UTF-8def groovyClass = loader.parseClass(source)def groovyObject = groovyClass.newInstance()groovyObject.setProperty("args", [talk]as Object[])groovyObject.invokeMethod("run", [] as Object[])
  • 8. <呼び先(AquesTalkByJNA.groovy )>String talk=args[1]// AquesTalkDa.dll の宣言関数interface Aques extends Library { Aques INSTANCE = Native.loadLibrary("AquesTalkDa", Aques.class) Pointer AquesTalkDa_Create() void AquesTalkDa_Release(Pointer hMe) int AquesTalkDa_PlaySync(String koe, int iSpeed) Pointer AquesTalkDa_Play(Pointer hMe, String koe, int iSpeed, PointerhWnd, int msg,int dwUser) int AquesTalkDa_IsPlay(Pointer hMe)}// ハンドラの作成Pointer data = Aques.INSTANCE.AquesTalkDa_Create()// 再生Aques.INSTANCE.AquesTalkDa_Play(data, talk, 100, null, 0, 0)Thread.sleep(6000) //★ 再生時間の確保// ハンドラの開放Aques.INSTANCE.AquesTalkDa_Release(data)
  • 9. でも、NG!(DLLが見つからない) WebStartで実行するアプリって、  カレントディレクトリはデスクトップ  dllをデスクトップに置くって微妙・・・。  Javaはカレントディレクトリって変えられないよね~ <呼び先(AquesTalkByJNA.groovy )>String talk=args[1]//DLL検索パスの明示NativeLibrary.addSearchPath(“AquesTalkDa”,DLLPATH) //★// AquesTalkDa.dll の宣言関数public interface Aques extends Library { Aques INSTANCE = Native.loadLibrary("AquesTalkDa", Aques.class)★)DLLの検索ディレクトリを指定!(DLL位置も動的指定可能!)
  • 10. で見事再生!<デモ有>(ランダムで音声も変更できるよ)AquesTalk の制限事項 全角ひらがな、カタカナのみ <不正文字がある時は再生しない 「‘」でアクセント、1ワード1個(/ 、。?で区切り)JNA制限事項 NativeLibrary.addSearchPath は先宣言のみ有効 =>同一ClassLoaderでは繰り返し変更は不可 <残念!
  • 11. ならJenkins(旧Hudson)のジョブ上でも しゃべらせられるかも?
  • 12. Jenkins(旧Hudson)とは OSSのCI(Continuous Integration)ツール 実行は [ java –jar jenkins.war]で手軽! Groovyスクリプトも使えます  HudsonTerminal Plugin  Go-kon plugin とか拡張Pluginも豊富です Jenkins CLI というコマンドラインIFもありますjava -jar jenkins-cli.jar [-s JENKINS_URL] XX.groovy JENKINS. groovyコード CLI
  • 13. ファイル構成(Hudson.CLI)LTHudson/hudson-mst ・・Hudsonの実行フォルダ hudson.bat ・・hudson起動BAT hudson-cli.bat ・・hudson-cli用BAT Job ・・実行されるジョブ Script gcon_jnatest.groovy (UTF8 =>SJISで保存) AquesTalkByJNA.groovy(UTF8) lib libjna jna.jar platform.jar dll 音声タイプ/AquesTalkDa.dll War/WEB-INF/hudson-cli.jar War/WEB-INF/lib/groovy-all-1.6.0.jar War/WEB-INF/lib/groovy-all-1.7.5.jar
  • 14. BATの中身Hudson.bat ・・Hudson起動バッチファイルset JAVA_HOME=C:¥opt¥jdkset CMD_OPTION=--httpPort=38080 --httpsPort=38081 --ajp13Port=-1%JAVA_HOME%/bin/java -XX:MaxPermSize=256m -Xms256m -Xmx256m-jar hudson.war %CMD_OPTION%Hudson-cli.bat ・・Jenkinsに接続するプロセスBATcd /d %0¥..set JAVA_HOME=C:¥opt¥jdkset CMD_URL=http://127.0.0.1:38080set CLASSPATH=./war/WEB-INF/*;./script/lib/*%JAVA_HOME%/bin/java -cp "%CLASSPATH%" hudson.cli.CLI -s %CMD_URL% groovy %* %CMD_URL%
  • 15. 手間取りましたが動きました! <デモ有>
  • 16. 何点か注意点 このジョブはgrooby-all 1.7系でしか動きません(要差替え)  Jenkins同梱のgroovy-all.jarは1.6.0  new GroovyCodeSource(fn,“UTF-8”) を使えるのは、1.7系から  1.6.0だとスクリプト上のインナークラス宣言がエラーが出てしまう  groovy-all-1.7.5.jar なら問題なく動く!(既存も今の所問題なし) core/src/main/java/  hudson.cli.GroovyCommand で下記のようなコード実装が・・  ジョブ上から呼べるGroovyスクリプトがOSエンコードに依存してしまう  WinだとSJIS(MACはUTF8なので対処は要らないけど・・)  日本語を扱ったり、日本語コメントがあると動かないということ  Command直の実行groovyをSJIS保存で一応回避は出来るけど・・。 Binding binding = new Binding(); binding.setProperty("out",new PrintWriter(stdout,true)); GroovyShell groovy = new GroovyShell(binding); groovy.run(loadScript(),“RemoteClass”,~ 今後のWin対応(UTF8指定可能対応)期待したいな~ Goovy-all-1.7.5.jar に本体のjarが差し替え期待!
  • 17. 資料リンク Jenkins(旧Hudson)公式サイト  https://wiki.jenkins-ci.org/display/JA/Jenkins  使用Plugin setEnv Plugin BatchTask Plugin Go-kon plugin AquesTalk公式サイト  http://www.a-quest.com/products/aquestalk.html  使ったライブラリ AquesTalk Win 拡張声種ライブラリ(Win用) 検証コードのURL  https://github.com/kimukou26/hudsontest LTHudsonのフォルダ
  • 18. こんな事も出来ます(1)3回同じJOBを3回実行して次のJOBへ進む  JenkinsCLI + HttpUnit(jar) のコンボで Groovyファイル内で下記のURLを呼ぶとJOB動きます $JENKINS_URL/job/$JOB_NAME/build?delay=30sec 次の繰り返しJOB 予約 3回繰り返して先に進む JOB例
  • 19. こんな事も出来ます(2)GradlePluginを入れると GriffonのコンパイルもJOBで出来ます! Grails 用は Grails Pluginが有ります!
  • 20. 気づいた事メモ1. ビルド履歴を全部消す 1. $JENKINS_HOME/Jobs/$JOB_NAME/builds の中身を消す 2. $JENKINS_HOME/Jobs/$JOB_NAME/nextBuildNumber を消す プラグインの手動インストール  $JENKINS_HOME/plugin にいれる  Jenkinsを再起動する Jenkins.warのアップグレード  $JENKINS_HOME に jenkins.warを置く  Jenkinsを再起動  Warフォルダ配下は再作成される (groovy-all-1.7.5.jar も消されちゃいます)