Hudson以外の何か with 任意
-
Upload
bleis-tift -
Category
Technology
-
view
3.013 -
download
4
Transcript of Hudson以外の何か with 任意
![Page 1: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/1.jpg)
Hudson以外の何か with 任意
bleis-tift
May 28, 2011
![Page 2: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/2.jpg)
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマGitとか Jenkinsとかが好物F#とか Scalaも大好き
![Page 3: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/3.jpg)
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマ
Gitとか Jenkinsとかが好物F#とか Scalaも大好き
![Page 4: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/4.jpg)
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマGitとか Jenkinsとかが好物
F#とか Scalaも大好き
![Page 5: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/5.jpg)
自己紹介
id:bleis-tift / @bleis
名古屋で働くプログラマGitとか Jenkinsとかが好物F#とか Scalaも大好き
![Page 6: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/6.jpg)
自己紹介
![Page 7: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/7.jpg)
自己紹介
![Page 8: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/8.jpg)
今日話すこと
.
. .1 CIの完了通知
デモ
.
.
.
2 中身の話
大事なのはデモまでです。
それ以降はPerlとかGitとかGroovyとかRubyとかF#とか伺かとかの話を時間が許すまでします。
![Page 9: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/9.jpg)
今日話すこと
.
. .1 CIの完了通知
デモ
.
.
.
2 中身の話
大事なのはデモまでです。
それ以降はPerlとかGitとかGroovyとかRubyとかF#とか伺かとかの話を時間が許すまでします。
![Page 10: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/10.jpg)
今日話すこと
.
. .1 CIの完了通知
デモ
.
.
.
2 中身の話
大事なのはデモまでです。
それ以降はPerlとかGitとかGroovyとかRubyとかF#とか伺かとかの話を時間が許すまでします。
![Page 11: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/11.jpg)
![Page 12: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/12.jpg)
きのこ本
きのこ 51
プロジェクト自身にしゃべらせる
XFD(eXtreme Feedback Device)とかを使ってCIの結果を伝える、ということ
![Page 13: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/13.jpg)
きのこ本
きのこ 51
プロジェクト自身にしゃべらせる
XFD(eXtreme Feedback Device)とかを使ってCIの結果を伝える、ということ
![Page 14: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/14.jpg)
XFD
![Page 15: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/15.jpg)
XFD
![Page 16: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/16.jpg)
XFD
![Page 17: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/17.jpg)
CI
Continuous Integration(継続的インテグレーション)commit(push)のたびにコンパイルやテストを行い、自分の作業で何かまずいことをやっていないか素早くフィードバックこの発表では Jenkinsを使います
![Page 18: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/18.jpg)
CI
Continuous Integration(継続的インテグレーション)
commit(push)のたびにコンパイルやテストを行い、自分の作業で何かまずいことをやっていないか素早くフィードバックこの発表では Jenkinsを使います
![Page 19: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/19.jpg)
CI
Continuous Integration(継続的インテグレーション)commit(push)のたびにコンパイルやテストを行い、自分の作業で何かまずいことをやっていないか素早くフィードバック
この発表では Jenkinsを使います
![Page 20: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/20.jpg)
CI
Continuous Integration(継続的インテグレーション)commit(push)のたびにコンパイルやテストを行い、自分の作業で何かまずいことをやっていないか素早くフィードバックこの発表では Jenkinsを使います
![Page 21: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/21.jpg)
CIだけでは満足できない
壊れたことは検知できるけど、そもそも壊したくない
最新版をとってきたらコンパイルできない最新版をとってきたらテストに失敗するこんなのぜったいおかしいよ
何かを壊すような変更はRejectしたい!
![Page 22: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/22.jpg)
CIだけでは満足できない
壊れたことは検知できるけど、そもそも壊したくない
最新版をとってきたらコンパイルできない最新版をとってきたらテストに失敗するこんなのぜったいおかしいよ
何かを壊すような変更はRejectしたい!
![Page 23: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/23.jpg)
CIだけでは満足できない
壊れたことは検知できるけど、そもそも壊したくない
最新版をとってきたらコンパイルできない
最新版をとってきたらテストに失敗するこんなのぜったいおかしいよ
何かを壊すような変更はRejectしたい!
![Page 24: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/24.jpg)
CIだけでは満足できない
壊れたことは検知できるけど、そもそも壊したくない
最新版をとってきたらコンパイルできない最新版をとってきたらテストに失敗する
こんなのぜったいおかしいよ
何かを壊すような変更はRejectしたい!
![Page 25: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/25.jpg)
CIだけでは満足できない
壊れたことは検知できるけど、そもそも壊したくない
最新版をとってきたらコンパイルできない最新版をとってきたらテストに失敗するこんなのぜったいおかしいよ
何かを壊すような変更はRejectしたい!
![Page 26: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/26.jpg)
CIだけでは満足できない
壊れたことは検知できるけど、そもそも壊したくない
最新版をとってきたらコンパイルできない最新版をとってきたらテストに失敗するこんなのぜったいおかしいよ
何かを壊すような変更はRejectしたい!
![Page 27: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/27.jpg)
こんなのがいい
最新版は常にビルドできる最新版は常にテストが通る壊れたものは反映されない
これができたら素敵!
![Page 28: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/28.jpg)
こんなのがいい
最新版は常にビルドできる
最新版は常にテストが通る壊れたものは反映されない
これができたら素敵!
![Page 29: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/29.jpg)
こんなのがいい
最新版は常にビルドできる最新版は常にテストが通る
壊れたものは反映されない
これができたら素敵!
![Page 30: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/30.jpg)
こんなのがいい
最新版は常にビルドできる最新版は常にテストが通る壊れたものは反映されない
これができたら素敵!
![Page 31: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/31.jpg)
こんなのがいい
最新版は常にビルドできる最新版は常にテストが通る壊れたものは反映されない
これができたら素敵!
![Page 32: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/32.jpg)
実現してみた
![Page 33: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/33.jpg)
きれいなリポジトリ
簡単に言うと、
Private System Buildをサーバ側で勝手に行ってくれる仕組み
![Page 34: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/34.jpg)
きれいなリポジトリ
簡単に言うと、
Private System Buildをサーバ側で勝手に行ってくれる仕組み
![Page 35: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/35.jpg)
問題点
フィードバックをどうするか?
![Page 36: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/36.jpg)
問題点
![Page 37: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/37.jpg)
問題点
フィードバックをどうするか?
ブラウザに張り付く→
だるいメール、IM→見ないRSS→リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 38: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/38.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→
だるい
メール、IM→見ないRSS→リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 39: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/39.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるい
メール、IM→
見ないRSS→リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 40: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/40.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→
見ない
RSS→リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 41: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/41.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→見ない
RSS→
リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 42: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/42.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→見ないRSS→
リアルタイム性に欠ける
XFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 43: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/43.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→見ないRSS→リアルタイム性に欠ける
XFD→
Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 44: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/44.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→見ないRSS→リアルタイム性に欠けるXFD→
Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 45: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/45.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→見ないRSS→リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 46: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/46.jpg)
問題点
フィードバックをどうするか?ブラウザに張り付く→だるいメール、IM→見ないRSS→リアルタイム性に欠けるXFD→Private System Buildを大々的に通知されてもウザいだけ
リアルタイム性に優れた通知方法はないものか・・・
![Page 47: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/47.jpg)
なければ作ればいいじゃない!
リアルタイム性があってウザくなくて何かあったら絶対にみてしゃべるもの・・・
伺かしか!異論は認めますが受け付けません
![Page 48: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/48.jpg)
なければ作ればいいじゃない!
リアルタイム性があって
ウザくなくて何かあったら絶対にみてしゃべるもの・・・
伺かしか!異論は認めますが受け付けません
![Page 49: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/49.jpg)
なければ作ればいいじゃない!
リアルタイム性があってウザくなくて
何かあったら絶対にみてしゃべるもの・・・
伺かしか!異論は認めますが受け付けません
![Page 50: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/50.jpg)
なければ作ればいいじゃない!
リアルタイム性があってウザくなくて何かあったら絶対にみて
しゃべるもの・・・
伺かしか!異論は認めますが受け付けません
![Page 51: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/51.jpg)
なければ作ればいいじゃない!
リアルタイム性があってウザくなくて何かあったら絶対にみてしゃべるもの・・・
伺かしか!異論は認めますが受け付けません
![Page 52: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/52.jpg)
なければ作ればいいじゃない!
リアルタイム性があってウザくなくて何かあったら絶対にみてしゃべるもの・・・
伺かしか!
異論は認めますが受け付けません
![Page 53: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/53.jpg)
なければ作ればいいじゃない!
リアルタイム性があってウザくなくて何かあったら絶対にみてしゃべるもの・・・
伺かしか!異論は認めますが受け付けません
![Page 54: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/54.jpg)
伺か?
デスクトップマスコットです。もちろんみなさん使ってますよね?俺は最近また使い始めました。
![Page 55: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/55.jpg)
伺か?
デスクトップマスコットです。もちろんみなさん使ってますよね?俺は最近また使い始めました。
![Page 56: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/56.jpg)
伺か?
デスクトップマスコットです。
もちろんみなさん使ってますよね?俺は最近また使い始めました。
![Page 57: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/57.jpg)
伺か?
デスクトップマスコットです。もちろんみなさん使ってますよね?
俺は最近また使い始めました。
![Page 58: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/58.jpg)
伺か?
デスクトップマスコットです。もちろんみなさん使ってますよね?俺は最近また使い始めました。
![Page 59: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/59.jpg)
どうやってしゃべらせるの?
SSTP Sakura Script Tranfer Protocol
Secure Socket Tunneling Protocolじゃないよ!伺かに SSTPを投げるとしゃべらせたり色々できる
![Page 60: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/60.jpg)
どうやってしゃべらせるの?
SSTP Sakura Script Tranfer ProtocolSecure Socket Tunneling Protocolじゃないよ!
伺かに SSTPを投げるとしゃべらせたり色々できる
![Page 61: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/61.jpg)
どうやってしゃべらせるの?
SSTP Sakura Script Tranfer ProtocolSecure Socket Tunneling Protocolじゃないよ!伺かに SSTPを投げるとしゃべらせたり色々できる
![Page 62: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/62.jpg)
SSTP
![Page 63: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/63.jpg)
SSTP
![Page 64: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/64.jpg)
SSTP
![Page 65: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/65.jpg)
SSTP
![Page 66: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/66.jpg)
全体概要
![Page 67: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/67.jpg)
全体概要
![Page 68: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/68.jpg)
1. push
![Page 69: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/69.jpg)
1. push
pushをトリガーにCIのジョブをキック
Gitのフックスクリプトを使用シェルスクリプトとPerl
→Gitを入れるとPerlは絶対入っているのでPerlならどんな環境でも使える
![Page 70: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/70.jpg)
1. push
pushをトリガーにCIのジョブをキックGitのフックスクリプトを使用
シェルスクリプトとPerl
→Gitを入れるとPerlは絶対入っているのでPerlならどんな環境でも使える
![Page 71: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/71.jpg)
1. push
pushをトリガーにCIのジョブをキックGitのフックスクリプトを使用シェルスクリプトとPerl
→Gitを入れるとPerlは絶対入っているのでPerlならどんな環境でも使える
![Page 72: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/72.jpg)
1. push
pushをトリガーにCIのジョブをキックGitのフックスクリプトを使用シェルスクリプトとPerl→Gitを入れるとPerlは絶対入っているのでPerlならどんな環境でも使える
![Page 73: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/73.jpg)
2. CI
![Page 74: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/74.jpg)
3. 通知
![Page 75: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/75.jpg)
3. 通知
Notification Pluginはビルドの開始しか通知できない
Groovy Postbuild Pluginはビルドが終わった後に動くので、何でもできるGroovyのRuntimeは Jenkinsに同梱されているため自分で用意する必要なし
![Page 76: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/76.jpg)
3. 通知
Notification Pluginはビルドの開始しか通知できないGroovy Postbuild Pluginはビルドが終わった後に動くので、何でもできる
GroovyのRuntimeは Jenkinsに同梱されているため自分で用意する必要なし
![Page 77: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/77.jpg)
3. 通知
Notification Pluginはビルドの開始しか通知できないGroovy Postbuild Pluginはビルドが終わった後に動くので、何でもできるGroovyのRuntimeは Jenkinsに同梱されているため自分で用意する必要なし
![Page 78: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/78.jpg)
4. 通知
![Page 79: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/79.jpg)
4. 通知
JenkinsはWindows上で動いている
サービスとして動かす必要がある
cygrunsrvを使うと簡単にサービスが作れる!RubyなのはPerlとPythonよりも慣れているから標準ライブラリだけでTCPサーバ/クライアントが 100行以下
![Page 80: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/80.jpg)
4. 通知
JenkinsはWindows上で動いているサービスとして動かす必要がある
cygrunsrvを使うと簡単にサービスが作れる!
RubyなのはPerlとPythonよりも慣れているから標準ライブラリだけでTCPサーバ/クライアントが 100行以下
![Page 81: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/81.jpg)
4. 通知
JenkinsはWindows上で動いているサービスとして動かす必要があるcygrunsrvを使うと簡単にサービスが作れる!
RubyなのはPerlとPythonよりも慣れているから標準ライブラリだけでTCPサーバ/クライアントが 100行以下
![Page 82: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/82.jpg)
4. 通知
JenkinsはWindows上で動いているサービスとして動かす必要があるcygrunsrvを使うと簡単にサービスが作れる!RubyなのはPerlとPythonよりも慣れているから
標準ライブラリだけでTCPサーバ/クライアントが 100行以下
![Page 83: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/83.jpg)
4. 通知
JenkinsはWindows上で動いているサービスとして動かす必要があるcygrunsrvを使うと簡単にサービスが作れる!RubyなのはPerlとPythonよりも慣れているから標準ライブラリだけでTCPサーバ/クライアントが 100行以下
![Page 84: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/84.jpg)
5. 情報の取得/6. 通知
![Page 85: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/85.jpg)
5. 情報の取得/6. 通知
通知されるのは Job名とBuild番号のみで、具体的な情報は取りに行く
Rubyであんまゴリゴリ書きたくなかったScalaとF#の二択だけど、JVM常時起動とかあんまりしたくないので F#
![Page 86: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/86.jpg)
5. 情報の取得/6. 通知
通知されるのは Job名とBuild番号のみで、具体的な情報は取りに行くRubyであんまゴリゴリ書きたくなかった
ScalaとF#の二択だけど、JVM常時起動とかあんまりしたくないので F#
![Page 87: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/87.jpg)
5. 情報の取得/6. 通知
通知されるのは Job名とBuild番号のみで、具体的な情報は取りに行くRubyであんまゴリゴリ書きたくなかったScalaとF#の二択だけど、JVM常時起動とかあんまりしたくないので F#
![Page 88: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/88.jpg)
どうやって通知してるの?
Ruby側で IPのリストを保持して、そこに対して通知F#側で 1時間ごとにどの Jobを通知してほしいかリクエストを出すRuby側は3時間リクエストが来ない IPを削除
![Page 89: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/89.jpg)
どうやって通知してるの?
Ruby側で IPのリストを保持して、そこに対して通知
F#側で 1時間ごとにどの Jobを通知してほしいかリクエストを出すRuby側は3時間リクエストが来ない IPを削除
![Page 90: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/90.jpg)
どうやって通知してるの?
Ruby側で IPのリストを保持して、そこに対して通知F#側で 1時間ごとにどの Jobを通知してほしいかリクエストを出す
Ruby側は3時間リクエストが来ない IPを削除
![Page 91: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/91.jpg)
どうやって通知してるの?
Ruby側で IPのリストを保持して、そこに対して通知F#側で 1時間ごとにどの Jobを通知してほしいかリクエストを出すRuby側は3時間リクエストが来ない IPを削除
![Page 92: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/92.jpg)
デモ
![Page 93: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/93.jpg)
・・・ふぅ
![Page 94: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/94.jpg)
以降ほとんど蛇足です。
bleis-tiftの取り留めもない話をお楽しみください。
![Page 95: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/95.jpg)
以降ほとんど蛇足です。bleis-tiftの取り留めもない話をお楽しみください。
![Page 96: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/96.jpg)
F#部分の設定
設定画面作るの面倒F#のコードで設定すればいいんじゃね?という同僚まえしぃ☆ですよねー
![Page 97: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/97.jpg)
F#部分の設定
設定画面作るの面倒
F#のコードで設定すればいいんじゃね?という同僚まえしぃ☆ですよねー
![Page 98: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/98.jpg)
F#部分の設定
設定画面作るの面倒F#のコードで設定すればいいんじゃね?という同僚まえしぃ☆
ですよねー
![Page 99: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/99.jpg)
F#部分の設定
設定画面作るの面倒F#のコードで設定すればいいんじゃね?という同僚まえしぃ☆ですよねー
![Page 100: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/100.jpg)
F#のコード片を動的に実行
.
こんな感じ
.
.
.
use provider = new FSharpCodeProvider()
let src = "module Temp\n\
let body (arg: " + argType + "): " +
retType + " =\n" + expr
let param = CompilerParameters(
GenerateInMemory=true)
let res = provider
.CompileAssemblyFromSource(param, src)
let asm = res.CompiledAssembly
let t = asm.GetType("Temp")
t.GetMethod("body").Invoke(null, arg)
![Page 101: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/101.jpg)
F#のコード片を動的に実行
.
こんな感じ
.
.
.
use provider = new FSharpCodeProvider()
let src = "module Temp\n\
let body (arg: " + argType + "): " +
retType + " =\n" + expr
let param = CompilerParameters(
GenerateInMemory=true)
let res = provider
.CompileAssemblyFromSource(param, src)
let asm = res.CompiledAssembly
let t = asm.GetType("Temp")
t.GetMethod("body").Invoke(null, arg)
![Page 102: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/102.jpg)
デモ
![Page 103: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/103.jpg)
うーん・・・
コンソールっぽいものを作らないと使い物にならない・・・
まえしぃ☆「fsi使えればいいんじゃね?」
そ れ だ !
![Page 104: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/104.jpg)
うーん・・・
コンソールっぽいものを作らないと使い物にならない・・・まえしぃ☆「fsi使えればいいんじゃね?」
そ れ だ !
![Page 105: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/105.jpg)
うーん・・・
コンソールっぽいものを作らないと使い物にならない・・・まえしぃ☆「fsi使えればいいんじゃね?」
そ れ だ !
![Page 106: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/106.jpg)
fsiでアプリケーションを操作
-rオプションを使えば fsi.exeに dllを読み込ませることができるこれで必要な dll読み込ませたら、fsiから各種設定できる!慣れ親しんだREPLの機能が使える!!みんなハッピー!!!
![Page 107: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/107.jpg)
fsiでアプリケーションを操作
-rオプションを使えば fsi.exeに dllを読み込ませることができる
これで必要な dll読み込ませたら、fsiから各種設定できる!慣れ親しんだREPLの機能が使える!!みんなハッピー!!!
![Page 108: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/108.jpg)
fsiでアプリケーションを操作
-rオプションを使えば fsi.exeに dllを読み込ませることができるこれで必要な dll読み込ませたら、fsiから各種設定できる!
慣れ親しんだREPLの機能が使える!!みんなハッピー!!!
![Page 109: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/109.jpg)
fsiでアプリケーションを操作
-rオプションを使えば fsi.exeに dllを読み込ませることができるこれで必要な dll読み込ませたら、fsiから各種設定できる!慣れ親しんだREPLの機能が使える!!
みんなハッピー!!!
![Page 110: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/110.jpg)
fsiでアプリケーションを操作
-rオプションを使えば fsi.exeに dllを読み込ませることができるこれで必要な dll読み込ませたら、fsiから各種設定できる!慣れ親しんだREPLの機能が使える!!みんなハッピー!!!
![Page 111: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/111.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に
起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 112: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/112.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定
-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に
起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 113: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/113.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定
–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に
起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 114: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/114.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に
起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 115: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/115.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に
起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 116: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/116.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に起動元プログラムのパスを libに指定
起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 117: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/117.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定
モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 118: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/118.jpg)
fsiのオプション
–lib:path dllを検索するディレクトリの指定-r asmfile 参照に追加する dllの指定–use:file fsi起動時に読み込むプログラムの指定
これを使って、fsi起動時に起動元プログラムのパスを libに指定起動元プログラムとやり取りを行うための dllを rに指定モジュールの openと、設定を取得するだけのプログラムを useに指定
![Page 119: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/119.jpg)
起動元プログラムとのやり取り
![Page 120: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/120.jpg)
起動元プログラムとのやり取り
![Page 121: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/121.jpg)
設定の取得
![Page 122: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/122.jpg)
設定の取得
![Page 123: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/123.jpg)
設定の取得
![Page 124: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/124.jpg)
設定の取得
![Page 125: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/125.jpg)
設定の取得
![Page 126: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/126.jpg)
設定の取得
![Page 127: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/127.jpg)
設定の反映
![Page 128: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/128.jpg)
設定の反映
![Page 129: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/129.jpg)
設定の反映
![Page 130: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/130.jpg)
設定の反映
![Page 131: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/131.jpg)
設定の反映
![Page 132: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/132.jpg)
デモ
![Page 133: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/133.jpg)
結論
GUIなんていらんかったんや・・・
![Page 134: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/134.jpg)
結論
GUIなんていらんかったんや・・・
![Page 135: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/135.jpg)
Gitのフックスクリプト
Gitに限らず、DVCSのフックスクリプトには配布の問題がある基本的にはリポジトリの作成時にテンプレートからコピーされるので、スクリプトの更新に弱い「多人数開発でGitを使う場合の環境構築」というエントリ「間接的に使えばいいじゃない!」という解決策
![Page 136: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/136.jpg)
Gitのフックスクリプト
Gitに限らず、DVCSのフックスクリプトには配布の問題がある
基本的にはリポジトリの作成時にテンプレートからコピーされるので、スクリプトの更新に弱い「多人数開発でGitを使う場合の環境構築」というエントリ「間接的に使えばいいじゃない!」という解決策
![Page 137: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/137.jpg)
Gitのフックスクリプト
Gitに限らず、DVCSのフックスクリプトには配布の問題がある基本的にはリポジトリの作成時にテンプレートからコピーされるので、スクリプトの更新に弱い
「多人数開発でGitを使う場合の環境構築」というエントリ「間接的に使えばいいじゃない!」という解決策
![Page 138: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/138.jpg)
Gitのフックスクリプト
Gitに限らず、DVCSのフックスクリプトには配布の問題がある基本的にはリポジトリの作成時にテンプレートからコピーされるので、スクリプトの更新に弱い「多人数開発でGitを使う場合の環境構築」というエントリ「間接的に使えばいいじゃない!」という解決策
![Page 139: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/139.jpg)
こんな感じ
![Page 140: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/140.jpg)
こんな感じ
![Page 141: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/141.jpg)
こんな感じ
![Page 142: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/142.jpg)
発展させてみた
全てのフックに対応フック管理用コマンドインストール用スクリプト
わりと便利。
![Page 143: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/143.jpg)
発展させてみた
全てのフックに対応
フック管理用コマンドインストール用スクリプト
わりと便利。
![Page 144: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/144.jpg)
発展させてみた
全てのフックに対応フック管理用コマンド
インストール用スクリプト
わりと便利。
![Page 145: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/145.jpg)
発展させてみた
全てのフックに対応フック管理用コマンドインストール用スクリプト
わりと便利。
![Page 146: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/146.jpg)
発展させてみた
全てのフックに対応フック管理用コマンドインストール用スクリプト
わりと便利。
![Page 147: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/147.jpg)
フック管理用コマンドでできること
フックの一覧表示現在のリポジトリで有効化なフック一覧現在のリポジトリで無効化なフック一覧フックスクリプトの有効化フックスクリプトの無効化フックスクリプトの更新
![Page 148: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/148.jpg)
フック管理用コマンドでできること
フックの一覧表示現在のリポジトリで有効化なフック一覧現在のリポジトリで無効化なフック一覧フックスクリプトの有効化フックスクリプトの無効化フックスクリプトの更新
![Page 149: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/149.jpg)
コード
http://github.com/bleis-tift/Git-Hooks で公開してます。これの rewriteブランチが今回紹介したやつ。
![Page 150: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/150.jpg)
コード
http://github.com/bleis-tift/Git-Hooks で公開してます。
これの rewriteブランチが今回紹介したやつ。
![Page 151: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/151.jpg)
コード
http://github.com/bleis-tift/Git-Hooks で公開してます。これの rewriteブランチが今回紹介したやつ。
![Page 152: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/152.jpg)
Groovy Postbuild Plugin
Jenkinsの中で一番気に入っているプラグインJenkinsを使っている人は、このプラグインのためだけだとしてもGroovy使えるようになるべき今までPost build taskというプラグインと外部プログラムを使ってやっていたことをこいつで置き換えた結果、Jobの管理がしやすくなり、正確さも増し、機能も強化できた
![Page 153: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/153.jpg)
Groovy Postbuild Plugin
Jenkinsの中で一番気に入っているプラグイン
Jenkinsを使っている人は、このプラグインのためだけだとしてもGroovy使えるようになるべき今までPost build taskというプラグインと外部プログラムを使ってやっていたことをこいつで置き換えた結果、Jobの管理がしやすくなり、正確さも増し、機能も強化できた
![Page 154: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/154.jpg)
Groovy Postbuild Plugin
Jenkinsの中で一番気に入っているプラグインJenkinsを使っている人は、このプラグインのためだけだとしてもGroovy使えるようになるべき
今までPost build taskというプラグインと外部プログラムを使ってやっていたことをこいつで置き換えた結果、Jobの管理がしやすくなり、正確さも増し、機能も強化できた
![Page 155: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/155.jpg)
Groovy Postbuild Plugin
Jenkinsの中で一番気に入っているプラグインJenkinsを使っている人は、このプラグインのためだけだとしてもGroovy使えるようになるべき今までPost build taskというプラグインと外部プログラムを使ってやっていたことをこいつで置き換えた
結果、Jobの管理がしやすくなり、正確さも増し、機能も強化できた
![Page 156: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/156.jpg)
Groovy Postbuild Plugin
Jenkinsの中で一番気に入っているプラグインJenkinsを使っている人は、このプラグインのためだけだとしてもGroovy使えるようになるべき今までPost build taskというプラグインと外部プログラムを使ってやっていたことをこいつで置き換えた結果、Jobの管理がしやすくなり、正確さも増し、機能も強化できた
![Page 157: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/157.jpg)
何ができるん?
成功したビルドを失敗させたり外部のプロセス起動したりとにかくなんでもできますmanager.hudson(!)/manager.build
![Page 158: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/158.jpg)
何ができるん?
成功したビルドを失敗させたり
外部のプロセス起動したりとにかくなんでもできますmanager.hudson(!)/manager.build
![Page 159: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/159.jpg)
何ができるん?
成功したビルドを失敗させたり外部のプロセス起動したり
とにかくなんでもできますmanager.hudson(!)/manager.build
![Page 160: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/160.jpg)
何ができるん?
成功したビルドを失敗させたり外部のプロセス起動したりとにかくなんでもできます
manager.hudson(!)/manager.build
![Page 161: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/161.jpg)
何ができるん?
成功したビルドを失敗させたり外部のプロセス起動したりとにかくなんでもできますmanager.hudson(!)/manager.build
![Page 162: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/162.jpg)
Groovy?
JVM上で動作する動的型付けのスクリプト言語JVM上で動作するアプリケーションと連携させるといい感じかも?今のところ Jenkins以外で使おうとは思わないそれ Scalaで
![Page 163: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/163.jpg)
Groovy?
JVM上で動作する
動的型付けのスクリプト言語JVM上で動作するアプリケーションと連携させるといい感じかも?今のところ Jenkins以外で使おうとは思わないそれ Scalaで
![Page 164: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/164.jpg)
Groovy?
JVM上で動作する動的型付けのスクリプト言語
JVM上で動作するアプリケーションと連携させるといい感じかも?今のところ Jenkins以外で使おうとは思わないそれ Scalaで
![Page 165: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/165.jpg)
Groovy?
JVM上で動作する動的型付けのスクリプト言語JVM上で動作するアプリケーションと連携させるといい感じかも?
今のところ Jenkins以外で使おうとは思わないそれ Scalaで
![Page 166: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/166.jpg)
Groovy?
JVM上で動作する動的型付けのスクリプト言語JVM上で動作するアプリケーションと連携させるといい感じかも?今のところ Jenkins以外で使おうとは思わない
それ Scalaで
![Page 167: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/167.jpg)
Groovy?
JVM上で動作する動的型付けのスクリプト言語JVM上で動作するアプリケーションと連携させるといい感じかも?今のところ Jenkins以外で使おうとは思わないそれ Scalaで
![Page 168: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/168.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。
![Page 169: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/169.jpg)
push or reset
![Page 170: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/170.jpg)
push or reset
![Page 171: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/171.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。正確には、
ビルドが失敗したら resetして、ビルドは失敗ビルドが成功したら push
pushに成功したらビルドは成功pushに失敗したらビルドは失敗
最新版を取得しなおして、マージしてから再pushする必要がある
![Page 172: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/172.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。正確には、
ビルドが失敗したら resetして、ビルドは失敗
ビルドが成功したら push
pushに成功したらビルドは成功pushに失敗したらビルドは失敗
最新版を取得しなおして、マージしてから再pushする必要がある
![Page 173: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/173.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。正確には、
ビルドが失敗したら resetして、ビルドは失敗ビルドが成功したら push
pushに成功したらビルドは成功pushに失敗したらビルドは失敗
最新版を取得しなおして、マージしてから再pushする必要がある
![Page 174: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/174.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。正確には、
ビルドが失敗したら resetして、ビルドは失敗ビルドが成功したら push
pushに成功したらビルドは成功
pushに失敗したらビルドは失敗
最新版を取得しなおして、マージしてから再pushする必要がある
![Page 175: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/175.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。正確には、
ビルドが失敗したら resetして、ビルドは失敗ビルドが成功したら push
pushに成功したらビルドは成功pushに失敗したらビルドは失敗
最新版を取得しなおして、マージしてから再pushする必要がある
![Page 176: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/176.jpg)
push or reset
ビルドが成功したら push、失敗したら resetする必要がある。正確には、
ビルドが失敗したら resetして、ビルドは失敗ビルドが成功したら push
pushに成功したらビルドは成功pushに失敗したらビルドは失敗最新版を取得しなおして、マージしてから再pushする必要がある
![Page 177: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/177.jpg)
push or reset
.
こんな感じ
.
.
.
if (manager.build.result == hudson.model.Result.SUCCESS) {
def res = "git push origin master".execute().waitFor()
if (res == 0)
return
manager.buildFailure()
}
def commits = manager.build.changeSet.items
if (commits.length == 0)
return
def scm = manager.build.project.scm
def repo = scm.repositories[0].getURIs()[0].toString()
def parent = commits[0].parentCommit
def reset = "git --git-dir=$repo/.git reset --soft $parent"
reset.execute().waitFor()
![Page 178: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/178.jpg)
Rubyへの通知
![Page 179: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/179.jpg)
Rubyへの通知
![Page 180: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/180.jpg)
Rubyへの通知
.
こんな感じ
.
.
.
s = new java.net.Socket("localhost", 10000)
s << (manager.build.project.name + "\n"
+ manager.build.number + "\n")
s.close()
![Page 181: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/181.jpg)
CygwinでWindowsのサービス
Windowsのサービスを F#とかC#とかで作るのだるいですcygrunsrv使うと非常に簡単にCygwinのプログラムをサービス化できます
![Page 182: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/182.jpg)
CygwinでWindowsのサービス
Windowsのサービスを F#とかC#とかで作るのだるいです
cygrunsrv使うと非常に簡単にCygwinのプログラムをサービス化できます
![Page 183: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/183.jpg)
CygwinでWindowsのサービス
Windowsのサービスを F#とかC#とかで作るのだるいですcygrunsrv使うと非常に簡単にCygwinのプログラムをサービス化できます
![Page 184: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/184.jpg)
Cygwinのプログラムをサービス化
.
こんな感じ
.
.
.
cygrunsrv -I JobNotifier -p /usr/bin/ruby.exe \
-a /home/bleis/notifier.rb
これだけで・・・
![Page 185: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/185.jpg)
Cygwinのプログラムをサービス化
.
こんな感じ
.
.
.
cygrunsrv -I JobNotifier -p /usr/bin/ruby.exe \
-a /home/bleis/notifier.rb
これだけで・・・
![Page 186: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/186.jpg)
こうなる
![Page 187: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/187.jpg)
こうなる
![Page 188: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/188.jpg)
ゴーストを考慮したセリフ
人格を無視したセリフを無理やりしゃべらせるほど SではないですSakura Scriptで対応するという手もありますが、不確実ですお気に入りのゴーストがある人向けに、簡単にそのゴースト専用のセリフをしゃべらせることができるようにしてあります
![Page 189: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/189.jpg)
ゴーストを考慮したセリフ
人格を無視したセリフを無理やりしゃべらせるほど Sではないです
Sakura Scriptで対応するという手もありますが、不確実ですお気に入りのゴーストがある人向けに、簡単にそのゴースト専用のセリフをしゃべらせることができるようにしてあります
![Page 190: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/190.jpg)
ゴーストを考慮したセリフ
人格を無視したセリフを無理やりしゃべらせるほど SではないですSakura Scriptで対応するという手もありますが、不確実です
お気に入りのゴーストがある人向けに、簡単にそのゴースト専用のセリフをしゃべらせることができるようにしてあります
![Page 191: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/191.jpg)
ゴーストを考慮したセリフ
人格を無視したセリフを無理やりしゃべらせるほど SではないですSakura Scriptで対応するという手もありますが、不確実ですお気に入りのゴーストがある人向けに、簡単にそのゴースト専用のセリフをしゃべらせることができるようにしてあります
![Page 192: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/192.jpg)
EXECUTE/1.0
.
こんな感じ
.
.
.
EXECUTE SSTP/1.0
Sender: JobNotifier
Command: GetName
これで起動中のゴーストの名前が取れる!
![Page 193: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/193.jpg)
EXECUTE/1.0
.
こんな感じ
.
.
.
EXECUTE SSTP/1.0
Sender: JobNotifier
Command: GetName
これで起動中のゴーストの名前が取れる!
![Page 194: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/194.jpg)
EXECUTE/1.0
.
こんな感じ
.
.
.
EXECUTE SSTP/1.0
Sender: JobNotifier
Command: GetName
これで起動中のゴーストの名前が取れる!
![Page 195: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/195.jpg)
Sakura Script格納階層
default/default.txt
ゴースト名/abort/failure/success/unstable/
こんな感じの階層にテキストファイルを入れると、それなりに動きます。
![Page 196: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/196.jpg)
Sakura Script格納階層
default/default.txt
ゴースト名/abort/failure/success/unstable/
こんな感じの階層にテキストファイルを入れると、それなりに動きます。
![Page 197: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/197.jpg)
伺かとか無理・・・な人向けに
この発表の主な目的は伺かにしゃべらせる、という所にありますなのでこういう要望が出ること自体誠に遺憾なのですが、大人な対応を試みます
![Page 198: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/198.jpg)
伺かとか無理・・・な人向けに
この発表の主な目的は伺かにしゃべらせる、という所にあります
なのでこういう要望が出ること自体誠に遺憾なのですが、大人な対応を試みます
![Page 199: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/199.jpg)
伺かとか無理・・・な人向けに
この発表の主な目的は伺かにしゃべらせる、という所にありますなのでこういう要望が出ること自体誠に遺憾なのですが、大人な対応を試みます
![Page 200: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/200.jpg)
伺かとか無理・・・な人向けに
![Page 201: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/201.jpg)
伺かとか無理・・・な人向けに
この発表の主な目的は伺かにしゃべらせる、という所にありますなのでこういう要望が出ること自体誠に遺憾なのですが、大人な対応を試みます
伺かへの通知部分をPlugin化しており、デフォルトでは SSTPのほかに、バルーンによる通知にも対応しています
![Page 202: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/202.jpg)
伺かとか無理・・・な人向けに
この発表の主な目的は伺かにしゃべらせる、という所にありますなのでこういう要望が出ること自体誠に遺憾なのですが、大人な対応を試みます伺かへの通知部分をPlugin化しており、デフォルトでは SSTPのほかに、バルーンによる通知にも対応しています
![Page 203: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/203.jpg)
こんな感じ
.
Notifier.fs
.
.
.
module Notifier
open JobNotifier.Gui
let notify (app: App) (job: Jenkins.Job.t) (build: Jenkins.Build.t) _ _ =
let icon =
match build.Result with
| "SUCCESS" -> App.Icon.Info
| "FAILURE" -> App.Icon.Error
| _ -> App.Icon.Warning
app.ShowBalloonTip(icon, job.Name + " : " + build.Result)
![Page 204: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/204.jpg)
こんな感じ
.
Notifier.fs
.
.
.
module Notifier
open JobNotifier.Gui
let notify (app: App) (job: Jenkins.Job.t) (build: Jenkins.Build.t) _ _ =
let icon =
match build.Result with
| "SUCCESS" -> App.Icon.Info
| "FAILURE" -> App.Icon.Error
| _ -> App.Icon.Warning
app.ShowBalloonTip(icon, job.Name + " : " + build.Result)
![Page 205: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/205.jpg)
デモ
![Page 206: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/206.jpg)
これから
Pluginで通知方法自由自在なので、「おとなしいXFD」はありかもそれこそダンボーの目が光るとか
mzp の目が光るとか今回作った仕組みで夢が広がりんぐ!
![Page 207: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/207.jpg)
これから
Pluginで通知方法自由自在なので、「おとなしいXFD」はありかも
それこそダンボーの目が光るとか
mzp の目が光るとか今回作った仕組みで夢が広がりんぐ!
![Page 208: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/208.jpg)
これから
Pluginで通知方法自由自在なので、「おとなしいXFD」はありかもそれこそダンボーの目が光るとか
mzp の目が光るとか今回作った仕組みで夢が広がりんぐ!
![Page 209: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/209.jpg)
これから
Pluginで通知方法自由自在なので、「おとなしいXFD」はありかもそれこそダンボーの目が光るとか
mzp の目が光るとか
今回作った仕組みで夢が広がりんぐ!
![Page 210: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/210.jpg)
これから
Pluginで通知方法自由自在なので、「おとなしいXFD」はありかもそれこそダンボーの目が光るとか
mzp の目が光るとか今回作った仕組みで夢が広がりんぐ!
![Page 211: Hudson以外の何か with 任意](https://reader034.fdocument.pub/reader034/viewer/2022042521/556609bdd8b42a06318b4700/html5/thumbnails/211.jpg)