Contenu connexe
Similaire à Hudson using Groovy #jggug
Similaire à Hudson using Groovy #jggug (20)
Plus de kimukou_26 Kimukou
Plus de kimukou_26 Kimukou (8)
Hudson using Groovy #jggug
- 2. みなさん、Groovyスクリプトを書くとき
何使っていますか~
自分はGroovyConsoleのWebStart版使ってます
( http://d.hatena.ne.jp/bluepapa32/20101006/1286337869 )
ここをクリック
- 3. インストールは手軽~
1. ウインドウ閉じた時に記
述保持機能あるよ
2. Grape やAntBuilderも問
題なしに使えます
- 5. WindowsでGroovyConsole+
AquesTalk(音声再生dll)で
出来ないもんかな~
JNAを使って
AquesTalkDa.dll
を読込むgroovyコード
GroovyClassLoaderを JNA
使って対象コードを
読むgroovyコード
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-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位置も動的指定可能!)
- 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%
- 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例
- 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 も消されちゃいます)