SlideShare a Scribd company logo
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%
手間取りましたが動きました!
    <デモ有>
Hudson using Groovy  #jggug
何点か注意点
   このジョブは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 も消されちゃいます)

More Related Content

PDF
Drone.io のご紹介
PDF
とある帽子の大蛇料理Ⅱ
PDF
WSL2+docker+JupyterとVS Codeリモート環境の構築
PDF
ServerWorks Sonic! 003 LT - GlusterをZabbixで監視してみた
PPTX
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
PDF
Jenkinsについて
PDF
Docker入門
PPT
Python開発環境三種の神器
Drone.io のご紹介
とある帽子の大蛇料理Ⅱ
WSL2+docker+JupyterとVS Codeリモート環境の構築
ServerWorks Sonic! 003 LT - GlusterをZabbixで監視してみた
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
Jenkinsについて
Docker入門
Python開発環境三種の神器

What's hot (18)

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

Similar to Hudson using Groovy #jggug (20)

PDF
明日から使えるgradle
PPTX
Jenkins と groovy
PDF
Groovy Shell Scripting 2015
PDF
Gws 20120521 gradle
PDF
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
PDF
Jenkins plugin memo
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
Groovyの紹介20130323
PPTX
Jenkins使ってみた~Windows編~
PDF
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
PDF
Gws 20130315 gradle_handson
PDF
groovy 2.1.0 20130118
PDF
Gradle a new Generation Build Tool
PPT
G*workshop sendai 20100424(v2)
PPTX
xUnitハンズオン第4回テキスト
PDF
Jenkinsstudy#4kokawa
PPTX
Jenkins x Kubernetesが簡単だと思ったら大変だった話
ODP
Jenkins導入ライブ
PDF
Groovy Bootcamp 2015 by JGGUG
PDF
Jenkins+Play!で気軽にCI
明日から使えるgradle
Jenkins と groovy
Groovy Shell Scripting 2015
Gws 20120521 gradle
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
Jenkins plugin memo
Java開発の強力な相棒として今すぐ使えるGroovy
Groovyの紹介20130323
Jenkins使ってみた~Windows編~
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Gws 20130315 gradle_handson
groovy 2.1.0 20130118
Gradle a new Generation Build Tool
G*workshop sendai 20100424(v2)
xUnitハンズオン第4回テキスト
Jenkinsstudy#4kokawa
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins導入ライブ
Groovy Bootcamp 2015 by JGGUG
Jenkins+Play!で気軽にCI
Ad

More from kimukou_26 Kimukou (9)

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

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%
  • 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 も消されちゃいます)