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

Hudson using Groovy #jggug

on

  • 2,762 views

 

Statistics

Views

Total Views
2,762
Views on SlideShare
2,762
Embed Views
0

Actions

Likes
1
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Hudson using Groovy  #jggug Hudson using Groovy #jggug Presentation Transcript

    • HudsonでGroovy 2010/12/09 @kimukou_26
    • みなさん、Groovyスクリプトを書くとき 何使っていますか~ 自分はGroovyConsoleのWebStart版使ってます( http://d.hatena.ne.jp/bluepapa32/20101006/1286337869 ) ここをクリック
    • インストールは手軽~1. ウインドウ閉じた時に記 述保持機能あるよ2. Grape やAntBuilderも問 題なしに使えます
    • @kiy0taka さんのブログで[ groovyでsay読み上げ ]の話見て
    • WindowsでGroovyConsole+ AquesTalk(音声再生dll)で 出来ないもんかな~ JNAを使って AquesTalkDa.dll を読込むgroovyコードGroovyClassLoaderを JNA 使って対象コードを 読むgroovyコード AquesTalkDa.dll
    • ファイル構成(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
    • で、ソースと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[])
    • <呼び先(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)
    • でも、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位置も動的指定可能!)
    • で見事再生!<デモ有>(ランダムで音声も変更できるよ)AquesTalk の制限事項 全角ひらがな、カタカナのみ <不正文字がある時は再生しない 「‘」でアクセント、1ワード1個(/ 、。?で区切り)JNA制限事項 NativeLibrary.addSearchPath は先宣言のみ有効 =>同一ClassLoaderでは繰り返し変更は不可 <残念!
    • ならJenkins(旧Hudson)のジョブ上でも しゃべらせられるかも?
    • 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
    • ファイル構成(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
    • 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%
    • 手間取りましたが動きました! <デモ有>
    • 何点か注意点 このジョブは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が差し替え期待!
    • 資料リンク 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のフォルダ
    • こんな事も出来ます(1)3回同じJOBを3回実行して次のJOBへ進む  JenkinsCLI + HttpUnit(jar) のコンボで Groovyファイル内で下記のURLを呼ぶとJOB動きます $JENKINS_URL/job/$JOB_NAME/build?delay=30sec 次の繰り返しJOB 予約 3回繰り返して先に進む JOB例
    • こんな事も出来ます(2)GradlePluginを入れると GriffonのコンパイルもJOBで出来ます! Grails 用は Grails Pluginが有ります!
    • 気づいた事メモ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 も消されちゃいます)