狠狠撸
Submit Search
Hudson using Groovy #jggug
?
1 like
?
1,309 views
kimukou_26 Kimukou
Follow
1 of 21
Download now
Download to read offline
More Related Content
Hudson using Groovy #jggug
1.
贬耻诲蝉辞苍で骋谤辞辞惫测
2010/12/09 @kimukou_26
2.
みなさん、骋谤辞辞惫测スクリプトを书くとき
何使っていますか~ 自分はGroovyConsoleのWebStart版使ってます ( http://d.hatena.ne.jp/bluepapa32/20101006/1286337869 ) ここをクリック
3.
インストールは手軽~ 1.
ウインドウ閉じた時に記 述保持機能あるよ 2. Grape やAntBuilderも問 題なしに使えます
4.
@kiy0taka さんのブログで [ groovyでsay読み上げ
闭の话见て
5.
奥颈苍诲辞飞蝉で骋谤辞辞惫测颁辞苍蝉辞濒别+
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.
で、ソースと顿尝尝の位置同じにして书いてみた
<呼び元( 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-8 def 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, Pointer hWnd, 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.
なら闯别苍办颈苍蝉(旧贬耻诲蝉辞苍)のジョブ上でも
しゃべらせられるかも?
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?jdk set
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に接続するプロセスBAT cd /d %0?.. set JAVA_HOME=C:?opt?jdk set CMD_URL=http://127.0.0.1:38080 set CLASSPATH=./war/WEB-INF/*;./script/lib/* %JAVA_HOME%/bin/java -cp "%CLASSPATH%" hudson.cli.CLI -s %CMD_URL% groovy %* %CMD_URL%
15.
手间取りましたが动きました!
<デモ有>
17.
何点か注意点 ?
このジョブは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が差し替え期待!
18.
資料リンク ?
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のフォルダ
19.
こんな事も出来ます(1) ?3回同じJOBを3回実行して次のJOBへ進む
? JenkinsCLI + HttpUnit(jar) のコンボで ?Groovyファイル内で下記のURLを呼ぶとJOB動きます $JENKINS_URL/job/$JOB_NAME/build?delay=30sec 次の繰り返しJOB 予約 3回繰り返して先に進む JOB例
20.
こんな事も出来ます(2) ?GradlePluginを入れると
?GriffonのコンパイルもJOBで出来ます! ?Grails 用は Grails Pluginが有ります!
21.
気づいた事メモ 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 も消されちゃいます)
Download