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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Hudson using Groovy #jggug

2,282

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,282
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
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 も消されちゃいます)

×