CIのその先へ

86
CI のその先へ bleis-tift June 18, 2011

description

 

Transcript of CIのその先へ

Page 1: CIのその先へ

CIのその先へ

bleis-tift

June 18, 2011

Page 2: CIのその先へ

自己紹介

id:bleis-tift / @bleis

開発環境はVimでGitで Jenkins

プレゼン資料は LATEXで作ってPDF化

OSはWindowsなのでたまに変態扱いされるでもぜんぜんそんなことはない

Page 3: CIのその先へ

自己紹介

id:bleis-tift / @bleis

開発環境はVimでGitで Jenkins

プレゼン資料は LATEXで作ってPDF化

OSはWindowsなのでたまに変態扱いされるでもぜんぜんそんなことはない

Page 4: CIのその先へ

パターンによるソフトウェア構成管理

ソフトウェア構成管理にはパターンがある!

Page 5: CIのその先へ

パターンによるソフトウェア構成管理

ソフトウェア構成管理にはパターンがある!

Page 6: CIのその先へ

パターンによるソフトウェア構成管理

ソフトウェア構成管理にはパターンがある!

Page 7: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じでも重要だよ!

Page 8: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じでも重要だよ!

Page 9: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じでも重要だよ!

Page 10: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じでも重要だよ!

Page 11: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じでも重要だよ!

Page 12: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じ

でも重要だよ!

Page 13: CIのその先へ

ソフトウェア構成管理

ソフトウェア構成管理って?

バージョン管理

BTS/ITS

ビルド管理

直接の開発環境ではない感じでも重要だよ!

Page 14: CIのその先へ

今回するお話

いつもする具体的な話ではなく、こういうこと考えないといけないよね、とか、

こうなっているといいよね、という話をします。

Page 15: CIのその先へ

今回するお話

いつもする具体的な話ではなく、こういうこと考えないといけないよね、とか、こうなっているといいよね、という話をします。

Page 16: CIのその先へ

ビルド管理(CI以前)

管理なんてしてないよ!

秘伝のビルドスクリプトをですね・・・

専任のビルド職人がいまして・・・

cronでナイトリービルドしてますよ

Page 17: CIのその先へ

ビルド管理(CI以前)

管理なんてしてないよ!

秘伝のビルドスクリプトをですね・・・

専任のビルド職人がいまして・・・

cronでナイトリービルドしてますよ

Page 18: CIのその先へ

ビルド管理(CI以前)

管理なんてしてないよ!

秘伝のビルドスクリプトをですね・・・

専任のビルド職人がいまして・・・

cronでナイトリービルドしてますよ

Page 19: CIのその先へ

ビルド管理(CI以前)

管理なんてしてないよ!

秘伝のビルドスクリプトをですね・・・

専任のビルド職人がいまして・・・

cronでナイトリービルドしてますよ

Page 20: CIのその先へ

ビルド管理(CI以前)

管理なんてしてないよ!

秘伝のビルドスクリプトをですね・・・

専任のビルド職人がいまして・・・

cronでナイトリービルドしてますよ

Page 21: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 22: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 23: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 24: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 25: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 26: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・

CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 27: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツール

CIツールが無くてもCIは(一応)できるよ!

Page 28: CIのその先へ

CI

Continuous Integration:継続的統合

一日に一回と言わず、何度もビルドする

ビルドだけでなく、テストとかもやる

ゼロから製品として出荷可能な状態までの構築を何度もやる

ちなみに・・・CIはプラクティスで、CIツールはそれを支援するためのツールCIツールが無くてもCIは(一応)できるよ!

Page 29: CIのその先へ

おススメCIツール

Jenkinsがいいよ!いいところは一杯あるけど、一番大きいと思っているのが

導入のお手軽さ

他のCIツール試してもここで Jenkinsに勝てないとその先に進む気になれない・・・

Page 30: CIのその先へ

おススメCIツール

Jenkinsがいいよ!

いいところは一杯あるけど、一番大きいと思っているのが

導入のお手軽さ

他のCIツール試してもここで Jenkinsに勝てないとその先に進む気になれない・・・

Page 31: CIのその先へ

おススメCIツール

Jenkinsがいいよ!いいところは一杯あるけど、一番大きいと思っているのが

導入のお手軽さ

他のCIツール試してもここで Jenkinsに勝てないとその先に進む気になれない・・・

Page 32: CIのその先へ

おススメCIツール

Jenkinsがいいよ!いいところは一杯あるけど、一番大きいと思っているのが

導入のお手軽さ

他のCIツール試してもここで Jenkinsに勝てないとその先に進む気になれない・・・

Page 33: CIのその先へ

おススメCIツール

Jenkinsがいいよ!いいところは一杯あるけど、一番大きいと思っているのが

導入のお手軽さ

他のCIツール試してもここで Jenkinsに勝てないとその先に進む気になれない・・・

Page 34: CIのその先へ

CIで実現できること、できないこと

できること

ビルドが壊れたことの検知常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないこと

ビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 35: CIのその先へ

CIで実現できること、できないこと

できること

ビルドが壊れたことの検知常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないこと

ビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 36: CIのその先へ

CIで実現できること、できないこと

できることビルドが壊れたことの検知

常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないこと

ビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 37: CIのその先へ

CIで実現できること、できないこと

できることビルドが壊れたことの検知常にリリース可能な体制の構築

各種メトリクスを採取して、その移り変わりを見る

できないこと

ビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 38: CIのその先へ

CIで実現できること、できないこと

できることビルドが壊れたことの検知常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないこと

ビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 39: CIのその先へ

CIで実現できること、できないこと

できることビルドが壊れたことの検知常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないこと

ビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 40: CIのその先へ

CIで実現できること、できないこと

できることビルドが壊れたことの検知常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないことビルドを壊さない

壊さないことを確認したうえでのリポジトリへの更新

Page 41: CIのその先へ

CIで実現できること、できないこと

できることビルドが壊れたことの検知常にリリース可能な体制の構築各種メトリクスを採取して、その移り変わりを見る

できないことビルドを壊さない壊さないことを確認したうえでのリポジトリへの更新

Page 42: CIのその先へ

Private System Buildパターン

コミットする前にローカルでビルドしようね!ということ

そんなの忘れちゃう・・・人間だもの

忘れないように機械にやってもらおう!

ローカルでCIまわせばいいじゃない!

Page 43: CIのその先へ

Private System Buildパターン

コミットする前にローカルでビルドしようね!ということ

そんなの忘れちゃう・・・人間だもの

忘れないように機械にやってもらおう!

ローカルでCIまわせばいいじゃない!

Page 44: CIのその先へ

Private System Buildパターン

コミットする前にローカルでビルドしようね!ということ

そんなの忘れちゃう・・・人間だもの

忘れないように機械にやってもらおう!

ローカルでCIまわせばいいじゃない!

Page 45: CIのその先へ

Private System Buildパターン

コミットする前にローカルでビルドしようね!ということ

そんなの忘れちゃう・・・人間だもの

忘れないように機械にやってもらおう!

ローカルでCIまわせばいいじゃない!

Page 46: CIのその先へ

Private System Buildパターン

コミットする前にローカルでビルドしようね!ということ

そんなの忘れちゃう・・・人間だもの

忘れないように機械にやってもらおう!

ローカルでCIまわせばいいじゃない!

Page 47: CIのその先へ

Private System Buildパターン

コミットする前にローカルでビルドしようね!ということ

そんなの忘れちゃう・・・人間だもの

忘れないように機械にやってもらおう!

ローカルでCIまわせばいいじゃない!

Page 48: CIのその先へ

現実の壁

CI重いからローカルでやるのはつらい・・・

そもそもチェックさえできればローカルじゃなくてもいいんじゃね?

Page 49: CIのその先へ

現実の壁

CI重いからローカルでやるのはつらい・・・

そもそもチェックさえできればローカルじゃなくてもいいんじゃね?

Page 50: CIのその先へ

現実の壁

CI重いからローカルでやるのはつらい・・・

そもそもチェックさえできればローカルじゃなくてもいいんじゃね?

Page 51: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 52: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた

実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 53: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 54: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 55: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 56: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 57: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。

→クリーンリポジトリパターンと勝手に呼ぶ

Page 58: CIのその先へ

新しい別のパターンの考案

Private System Buildパターンも含む、より抽象的なパターンを考えてみた実現できればいいことに着目すると・・・

CIはローカルで動いてもサーバで動いてもいい

リポジトリに反映されるのは、ビルドが通ったものだけでないといけない

結果は変更を行った人だけが確認できればよく、大々的な通知はむしろ邪魔

これが実現できればその構成はどうだっていい。→クリーンリポジトリパターンと勝手に呼ぶ

Page 59: CIのその先へ

クリーンリポジトリパターン構成例

Page 60: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 61: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 62: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている

結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 63: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 64: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可

さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 65: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおk

Rubyで書いてみたものはある

これはCIですか・・・?

Page 66: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 67: CIのその先へ

この構成では・・・

CIはサーバで動く

取得用と更新用のリポジトリを分けることで、ビルドが通ったもののみを反映させている結果の通知の仕組みは特に規定していない

CIツールに Jenkinsを使うならブラウザに張り付くでも可さすがにそれは・・・と思うなら、通知の仕組みを作ればおkRubyで書いてみたものはある

これはCIですか・・・?

Page 68: CIのその先へ

んー

CIを組み込んではいるけど、違う気がするCIがVCSをほぼ前提としているように、CIを前提としたこの構成にも何か名前付けたい・・・ソフトウェア構成管理パターンとしては「クリーンリポジトリパターン」と呼んでいるけど、プラクティスとしての名前が欲しい

名前募集中!

Page 69: CIのその先へ

んー

CIを組み込んではいるけど、違う気がする

CIがVCSをほぼ前提としているように、CIを前提としたこの構成にも何か名前付けたい・・・ソフトウェア構成管理パターンとしては「クリーンリポジトリパターン」と呼んでいるけど、プラクティスとしての名前が欲しい

名前募集中!

Page 70: CIのその先へ

んー

CIを組み込んではいるけど、違う気がするCIがVCSをほぼ前提としているように、CIを前提としたこの構成にも何か名前付けたい・・・

ソフトウェア構成管理パターンとしては「クリーンリポジトリパターン」と呼んでいるけど、プラクティスとしての名前が欲しい

名前募集中!

Page 71: CIのその先へ

んー

CIを組み込んではいるけど、違う気がするCIがVCSをほぼ前提としているように、CIを前提としたこの構成にも何か名前付けたい・・・ソフトウェア構成管理パターンとしては「クリーンリポジトリパターン」と呼んでいるけど、プラクティスとしての名前が欲しい

名前募集中!

Page 72: CIのその先へ

んー

CIを組み込んではいるけど、違う気がするCIがVCSをほぼ前提としているように、CIを前提としたこの構成にも何か名前付けたい・・・ソフトウェア構成管理パターンとしては「クリーンリポジトリパターン」と呼んでいるけど、プラクティスとしての名前が欲しい

名前募集中!

Page 73: CIのその先へ

さらにその先へ

ローカルで動くのがいいかサーバで動くのがいいかって言ったら、そりゃローカルの方がいい

サーバで動かしているのはあくまで妥協

ローカルで動くような軽いCIツールがあればいいんじゃね?

その土台として sbtって割と良さそうじゃね?

——妄想ここまで——

Page 74: CIのその先へ

さらにその先へ

ローカルで動くのがいいかサーバで動くのがいいかって言ったら、そりゃローカルの方がいい

サーバで動かしているのはあくまで妥協

ローカルで動くような軽いCIツールがあればいいんじゃね?

その土台として sbtって割と良さそうじゃね?

——妄想ここまで——

Page 75: CIのその先へ

さらにその先へ

ローカルで動くのがいいかサーバで動くのがいいかって言ったら、そりゃローカルの方がいい

サーバで動かしているのはあくまで妥協

ローカルで動くような軽いCIツールがあればいいんじゃね?

その土台として sbtって割と良さそうじゃね?

——妄想ここまで——

Page 76: CIのその先へ

さらにその先へ

ローカルで動くのがいいかサーバで動くのがいいかって言ったら、そりゃローカルの方がいい

サーバで動かしているのはあくまで妥協

ローカルで動くような軽いCIツールがあればいいんじゃね?

その土台として sbtって割と良さそうじゃね?

——妄想ここまで——

Page 77: CIのその先へ

さらにその先へ

ローカルで動くのがいいかサーバで動くのがいいかって言ったら、そりゃローカルの方がいい

サーバで動かしているのはあくまで妥協

ローカルで動くような軽いCIツールがあればいいんじゃね?

その土台として sbtって割と良さそうじゃね?

——妄想ここまで——

Page 78: CIのその先へ

さらにその先へ

ローカルで動くのがいいかサーバで動くのがいいかって言ったら、そりゃローカルの方がいい

サーバで動かしているのはあくまで妥協

ローカルで動くような軽いCIツールがあればいいんじゃね?

その土台として sbtって割と良さそうじゃね?

——妄想ここまで——

Page 79: CIのその先へ

まとめ

CI実践しよう!

Jenkins便利!

クリーンリポジトリ!

ローカルでCI回したい!

なんかつくりたいね!

Page 80: CIのその先へ

まとめ

CI実践しよう!

Jenkins便利!

クリーンリポジトリ!

ローカルでCI回したい!

なんかつくりたいね!

Page 81: CIのその先へ

まとめ

CI実践しよう!

Jenkins便利!

クリーンリポジトリ!

ローカルでCI回したい!

なんかつくりたいね!

Page 82: CIのその先へ

まとめ

CI実践しよう!

Jenkins便利!

クリーンリポジトリ!

ローカルでCI回したい!

なんかつくりたいね!

Page 83: CIのその先へ

まとめ

CI実践しよう!

Jenkins便利!

クリーンリポジトリ!

ローカルでCI回したい!

なんかつくりたいね!

Page 84: CIのその先へ

まとめ

CI実践しよう!

Jenkins便利!

クリーンリポジトリ!

ローカルでCI回したい!

なんかつくりたいね!

Page 85: CIのその先へ

おしまい

なんかすぐに発表らしいですが

Page 86: CIのその先へ

おしまい

なんかすぐに発表らしいですが