hudson using groovy #jggug
Post on 06-Jul-2015
2.316 Views
Preview:
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)で
出来ないもんかな~
AquesTalkDa.dll
JNAGroovyClassLoaderを
使って対象コードを読むgroovyコード
JNAを使ってAquesTalkDa.dll
を読込むgroovyコード
ファイル構成(GConsole)
LTHudson/standalonegcon_jnatest.groovy (UTF-8)AquesTalkByJNA.groovy (UTF-8)libgroovy-all-1.7.5.jarjna.jarplatform.jar
AquesTalkDa.dlldll/音声タイプ/AquesTalkDa.dll
で、ソースとDLLの位置同じにして書いてみた
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[])
<呼び元( gcon_jnatest.groovy )>
<呼び先(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)
でも、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もあります
groovyコードJENKINS.
CLI
java -jar jenkins-cli.jar [-s JENKINS_URL] XX.groovy
ファイル構成(Hudson.CLI)
LTHudson/hudson-mst ・・Hudsonの実行フォルダhudson.bat ・・hudson起動BAThudson-cli.bat ・・hudson-cli用BATJob ・・実行されるジョブScript
gcon_jnatest.groovy (UTF8 =>SJISで保存)AquesTalkByJNA.groovy(UTF8)liblibjna
jna.jarplatform.jar
dll音声タイプ/AquesTalkDa.dll
War/WEB-INF/hudson-cli.jarWar/WEB-INF/lib/groovy-all-1.6.0.jarWar/WEB-INF/lib/groovy-all-1.7.5.jar
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¥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 PluginBatchTask PluginGo-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
3回繰り返して先に進むJOB例
次の繰り返し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 も消されちゃいます)
top related