SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
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-8
def 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, 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もあります
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¥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%
手間取りましたが動きました!
    <デモ有>
何点か注意点
   このジョブは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 も消されちゃいます)

Contenu connexe

Tendances

Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presenKouhei Maeda
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方Yosuke Furukawa
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovyirof N
 
Shibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced MogilefsShibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced Mogilefsguest172cfb
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
CasperjsのインストールKohei Misu
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfesTakeshi Komiya
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
Ginとbindataで作るシングルバイナリWebApp
Ginとbindataで作るシングルバイナリWebAppGinとbindataで作るシングルバイナリWebApp
Ginとbindataで作るシングルバイナリWebAppAkihiko Horiuchi
 
CR5とJavaScriptによるウェブアプリの作り方
CR5とJavaScriptによるウェブアプリの作り方CR5とJavaScriptによるウェブアプリの作り方
CR5とJavaScriptによるウェブアプリの作り方MintJams Inc.
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Atsuo Ishimoto
 
実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで実践Go ツールの作成から配布まで
実践Go ツールの作成から配布までYusuke Miyake
 
主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow美穂 山田
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0Satoshi Kume
 

Tendances (19)

Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
Shibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced MogilefsShibuya Pm Tt08 Advanced Mogilefs
Shibuya Pm Tt08 Advanced Mogilefs
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
Casperjsのインストール
 
fluentd
fluentdfluentd
fluentd
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Ginとbindataで作るシングルバイナリWebApp
Ginとbindataで作るシングルバイナリWebAppGinとbindataで作るシングルバイナリWebApp
Ginとbindataで作るシングルバイナリWebApp
 
CR5とJavaScriptによるウェブアプリの作り方
CR5とJavaScriptによるウェブアプリの作り方CR5とJavaScriptによるウェブアプリの作り方
CR5とJavaScriptによるウェブアプリの作り方
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築
 
実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで
 
Code Pack の話
Code Pack の話Code Pack の話
Code Pack の話
 
主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
 

Similaire à Hudson using Groovy #jggug

TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発Hiroshi Kurokawa
 
13.11.02 playgroundthon環境構築
13.11.02 playgroundthon環境構築13.11.02 playgroundthon環境構築
13.11.02 playgroundthon環境構築Kei Nakazawa
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)Tetsuyuki Kobayashi
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTetsuyuki Kobayashi
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてkimukou_26 Kimukou
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!leverages_event
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118Uehara Junji
 

Similaire à Hudson using Groovy #jggug (20)

TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発
 
13.11.02 playgroundthon環境構築
13.11.02 playgroundthon環境構築13.11.02 playgroundthon環境構築
13.11.02 playgroundthon環境構築
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 

Plus de kimukou_26 Kimukou

JRebel for Android 1.2.14 update
JRebel for Android 1.2.14 updateJRebel for Android 1.2.14 update
JRebel for Android 1.2.14 updatekimukou_26 Kimukou
 
JRebel for Android 1.0 を試食してみた
JRebel for Android 1.0 を試食してみたJRebel for Android 1.0 を試食してみた
JRebel for Android 1.0 を試食してみたkimukou_26 Kimukou
 
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用kimukou_26 Kimukou
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築kimukou_26 Kimukou
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackkimukou_26 Kimukou
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackkimukou_26 Kimukou
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggugkimukou_26 Kimukou
 

Plus de kimukou_26 Kimukou (8)

JRebel for Android 1.2.14 update
JRebel for Android 1.2.14 updateJRebel for Android 1.2.14 update
JRebel for Android 1.2.14 update
 
JRebel for Android 1.0 を試食してみた
JRebel for Android 1.0 を試食してみたJRebel for Android 1.0 を試食してみた
JRebel for Android 1.0 を試食してみた
 
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
Griffon10 in groovy_fx
Griffon10 in groovy_fxGriffon10 in groovy_fx
Griffon10 in groovy_fx
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 

Dernier

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Dernier (8)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

Hudson using Groovy #jggug

  • 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も問 題なしに使えます
  • 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-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. なら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¥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%
  • 16.
  • 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 も消されちゃいます)