Your SlideShare is downloading. ×
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA

1,715

Published on

2014/06/28 に開催されたAsianAAでの発表資料です。

2014/06/28 に開催されたAsianAAでの発表資料です。

Published in: Technology, Business
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,715
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
7
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Gateway CheckIn Pattern Jenkins * Git @kyon_mm in AAA 2014/06/28
  • 2. Self Introduction
  • 3. Self Introduction • きょん(@kyon_mm) 26歳 うさみみエンジニア
  • 4. Self Introduction • きょん(@kyon_mm) 26歳 うさみみエンジニア • Test Architect in Nagoya
  • 5. Self Introduction • きょん(@kyon_mm) 26歳 うさみみエンジニア • Test Architect in Nagoya • Groovy, F#, C#, Scala
  • 6. Self Introduction • きょん(@kyon_mm) 26歳 うさみみエンジニア • Test Architect in Nagoya • Groovy, F#, C#, Scala • SCMBC, Nagoya.Testing, TDDBC
  • 7. Self Introduction • きょん(@kyon_mm) 26歳 うさみみエンジニア • Test Architect in Nagoya • Groovy, F#, C#, Scala • SCMBC, Nagoya.Testing, TDDBC • TDD/BDDチョットデキル
  • 8. Self Introduction • きょん(@kyon_mm) 26歳 うさみみエンジニア • Test Architect in Nagoya • Groovy, F#, C#, Scala • SCMBC, Nagoya.Testing, TDDBC • TDD/BDDチョットデキル • 月曜日に長男が生まれました
  • 9. Agenda • ツール紹介 • 安全と高速の両立 • JenkinsとGitによるGateway CheckIn Pattern • まとめ • おまけ
  • 10. Jenkins • Continuous Integration(CI) に特化したサー バーアプリケーションです。OSSですが、エン タープライズ版もあります。Javaがインス トールされていれば動きます。 • http://jenkins-ci.org/ • 現状最も柔軟なCIツール。
  • 11. Git • Distributed Version Control System(DVCS)に 特化したアプリケーションです。OSSで、 Linux, Mac, Windowsで動作します。 • http://git-scm.com/ • 現状最も人気のあるDVCSです。
  • 12. Agenda • ツール紹介 • 安全と高速の両立 • JenkinsとGitによるGateway CheckIn Pattern • まとめ • おまけ
  • 13. Gitのマージの不安全さ • CIなどでGitのマージを行うと便利そうに見えるときがあ る。 • イメージ • git checkout id/xxx • build • git merge master • git push origin master
  • 14. Gitのマージの不安全さ • Gitのマージはセマンティクスを保証しない。 • テストコードがセマンティクスを保証できて いるかどうかを判断するタイミングが、マー ジ前、マージ時、マージ後のときがあり、必 ずしも十分なテストコードであるかどうかは わからない。
  • 15. 不安全さ | 時間 を 人数で見る 不安全さ コミットする人数 手動マージ 自動マージ 時間 コミットする人数 手動マージ 自動マージ
  • 16. 安全側に倒す • 人数が少ないうちは多少の時間を犠牲にして 手動マージしたほうが安全なコミットをする ほうがメリットが高いことが多い。 • スキル差があまりにあるときや、タスク分割 が下手だと、いつまでもpushできないときが あるので、ペアプロ導入やコミット対象を気 にしたタスク分割をする。
  • 17. 特定テストを気軽に確認する • 自分の環境以外で全ての(例えば)UnitTestを確 認するためにJenkinsは向いている。
  • 18. 特定テストを気軽に確認する • 全員で1つのリポジトリを共有していると、テ ストが失敗したリビジョンが全員にpullされる 可能性がある • pushする前のルールが増えてしまい、下手し たらいつまでもローカルで作業をするという 悪循環が生まれる。
  • 19. 特定テストを気軽に確認する • コミッター毎にpush専用の個人用リポジトリ を用意することで、気軽にpush & CIをできる ようにする。 • push専用リポジトリ = privateリポジトリ • pull専用リポジトリ = centralリポジトリ
  • 20. Agenda • ツール紹介 • 安全と高速の両立 • JenkinsとGitによるGateway CheckIn Pattern • まとめ • おまけ
  • 21. Gateway CheckIn Pattern
  • 22. Gateway CheckIn Pattern ある基準をクリアしたコードのみが共有され る仕組み(すごいざっくり説明です。要出典)
  • 23. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 24. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central developer:compile & component test central:compile & component test & integration test
  • 25. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central developerジョブが成功したときのみ、pullできるリポジトリ にpushされる。 このdeveloperジョブをGatewayと見なして、Gateway CheckInと呼ぶことが多いようです。
  • 26. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central Gitolite Server Jenkins Server
  • 27. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 28. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 29. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 30. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 31. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 32. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 33. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 34. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 35. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central edit & merge pull ¦ clone push kick job
  • 36. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 37. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 38. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 39. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 40. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 41. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 42. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 43. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 44. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 45. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 46. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 47. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 48. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 49. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 50. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 51. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push
  • 52. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build
  • 53. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build jenkins push
  • 54. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build central build jenkins push
  • 55. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build central build jenkins push
  • 56. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build central buildbleis push jenkins push
  • 57. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build central buildbleis push jenkins push private build
  • 58. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build central buildbleis push jenkins push jenkins push private build
  • 59. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo kyon push private build central buildbleis push jenkins push jenkins push private build
  • 60. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 61. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo
  • 62. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push
  • 63. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push private build
  • 64. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push private build
  • 65. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push private build
  • 66. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push private build
  • 67. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push bleis pull private build
  • 68. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push bleis pull private build private build
  • 69. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push bleis pull private build jenkins push private build
  • 70. kyon_mm Local Repo kyon_mm private Repo Central Repo developer central bleis Local Repo bleis private Repo bleis push jenkins push bleis pull private build jenkins push central build private build
  • 71. Agenda • ツール紹介 • 安全と高速の両立 • JenkinsとGitによるGateway CheckIn Pattern • まとめ • おまけ
  • 72. 構成まとめ • Gitリポジトリ数 : 開発者数 = n +1 : n • Jenkinsジョブ数 = 2∼ • privateからのみGitのhookでdeveloperジョブ を起動。 • developerジョブ以降はJenkinsでジョブ連携
  • 73. 使っているJenkins Pluginや設定 • ビルドパラメータ • Git Plugin • Build PipeLine Plugin • Scriptler Plugin • Log Parser • Job ConfigHistory
  • 74. まとめ • 実際にはもっと後続のジョブを連携させていますが、基本形 は紹介した通りです。 • 少しずつ進歩してこの形になりましたが、基本的な形が出来 てから3年ほど経過しましたが、5名程度以下の開発ではうま くいっています。(それ以上は知らない。 • 気軽にpushできるようにしたり、pullできるのはある基準で の安全なコードのみに強制する仕組みもよい。 • リモートで仕事していると困るかもね :-p
  • 75. ご清聴ありがとうございました
  • 76. おまけ Jenkinsのダメなところ
  • 77. おまけ Jenkinsのダメなところ • ジョブは関数でしかないわけだが、関数的に扱えない。
  • 78. おまけ Jenkinsのダメなところ • ジョブは関数でしかないわけだが、関数的に扱えない。 • 同一のジョブを複数実行できない。再帰呼び出しも出来な い。例えば次ができない
  • 79. おまけ Jenkinsのダメなところ • ジョブは関数でしかないわけだが、関数的に扱えない。 • 同一のジョブを複数実行できない。再帰呼び出しも出来な い。例えば次ができない • JobAAA repo1
  • 80. おまけ Jenkinsのダメなところ • ジョブは関数でしかないわけだが、関数的に扱えない。 • 同一のジョブを複数実行できない。再帰呼び出しも出来な い。例えば次ができない • JobAAA repo1 • JobBBB repo1
  • 81. おまけ Jenkinsのダメなところ • ジョブは関数でしかないわけだが、関数的に扱えない。 • 同一のジョブを複数実行できない。再帰呼び出しも出来な い。例えば次ができない • JobAAA repo1 • JobBBB repo1 • JobBBB repo2
  • 82. おまけ Jenkinsのダメなところ • ジョブは関数でしかないわけだが、関数的に扱えない。 • 同一のジョブを複数実行できない。再帰呼び出しも出来な い。例えば次ができない • JobAAA repo1 • JobBBB repo1 • JobBBB repo2 • マスター/スレーブで実行しているときに、スレーブマシンで ジョブ実行中には「Jenkins自体の情報」を取得できない。
  • 83. おまけ 現状のCIで何を選ぶべきか
  • 84. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!!
  • 85. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI
  • 86. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!!
  • 87. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity
  • 88. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity
  • 89. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity • とにかく柔軟にやりたい!!!
  • 90. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity • とにかく柔軟にやりたい!!! • Jenkins
  • 91. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity • とにかく柔軟にやりたい!!! • Jenkins
  • 92. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity • とにかく柔軟にやりたい!!! • Jenkins • Jenkinsよりいいものがほしい!!!
  • 93. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity • とにかく柔軟にやりたい!!! • Jenkins • Jenkinsよりいいものがほしい!!! • Vert.x + Scala | Groovy
  • 94. おまけ 現状のCIで何を選ぶべきか • 簡単にやりたい!!! • Wercker, Travis.CI • オンプレミスで簡単にやりたい!!! • TeamCity • とにかく柔軟にやりたい!!! • Jenkins • Jenkinsよりいいものがほしい!!! • Vert.x + Scala | Groovy • でつくるのが良いと思います。

×