何も考えずにCIや継続的デリバリーしたら辛くなった話.pdf

7fefbc0ddbb13f3bfde050f85acfa0c4?s=47 ota42y
September 14, 2014
2.3k

 何も考えずにCIや継続的デリバリーしたら辛くなった話.pdf

7fefbc0ddbb13f3bfde050f85acfa0c4?s=128

ota42y

September 14, 2014
Tweet

Transcript

  1. 何も考えずにCIや 継続的デリバリーしたら ⾟辛くなった話

  2. 継続的インテグレーション

  3. CIのススメ リポジトリのコミットを監視して⾃自動実⾏行行 実行指示 コミットフック   定期実行

  4. CIのススメ リポジトリのコミットを監視して⾃自動実⾏行行 テストやテストサーバに⾃自動デプロイ等 実行指示 コミットフック   定期実行 デプロイ テストサーバ

  5. 継続的デプロイのススメ たとえば毎⽇日のように、 細かく新機能をデプロイしていく⼿手法 本番サーバ 開発 deploy 一日に何回もぐらいのペースで繰り返す

  6. Inspec'on Deploy Test Build CI   (継続的インテグレーション) 本番サーバ 開発 deploy

    一日に何回もぐらいのペースで繰り返す
  7. Inspec'on Deploy Test Build CI   (継続的インテグレーション) 本番サーバ 開発 deploy

    一日に何回もぐらいのペースで繰り返す
  8. ┗(^o^    )┓  ┏┗   最近は  CIや継続的デリバリーが 流流⾏行行ってるらしいぞ

  9. ┏(    ^o^)┛     ┛┓   このスマホアプリも 導⼊入しよう

  10. ┗(^o^    )┓  ┏┗  

  11. ┏(    ^o^)┛     ┛┓  

  12. ┗(^o^    )┓  ┏┗  

  13. ┏(    ^o^)┛     ┛┓  

  14.       三┏(    ^o^)┛         三  ┛┓   ヤルゾ

  15.       三┏(    ^o^)┛         三  ┛┓      | |   §  |   |

         | | |      §        |   |      ___§___     |                Jenkins                |     ▼▼▼▼▼▼▼
  16.        §          §          §          §  ティウンティウンティウン         §

         | | .§  |   |      | | |.  §◎|   |      __◎§__◎     |        Jenkins  ◎_ |     ▼◎▼  ▼◎  ▼◎
  17. 討ち死にました

  18. 何が起きたか 違う環境の⼿手法を、 ⼿手法ベースで持ってきたことで、 不不整合を起こして死んだ。

  19. Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします

  20. Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします アップロードします

  21. Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします アップロードします アップロードします アップロードします アップロードします

  22. Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします アップロードします アップロードします アップロードします アップロードします 同時に 送るな!!!

  23. Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードの平⾏行行処理理は⼤大体出来ない アップロードします アップロードします アップロードします アップロードします アップロードします 同時に 送るな!!!

  24. Job割り当てで死ぬ ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました

  25. Job割り当てで死ぬ ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました アップロードします

  26. Job割り当てで死ぬ アップロード処理理だけ別Job化で排他制御 ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました アップロードします

  27. Job割り当てで死ぬ アップロード処理理だけ別Job化で排他制御 ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました アップロードします DEAD  LOCK

  28. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない

  29. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 同時実⾏行行数4の場合

  30. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 実行待ちです… 同時実⾏行行数4の場合

  31. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない 終了マダー? 終了マダー? 終了マダー? 終了マダー? 実行待ちです… 同時実⾏行行数4の場合

  32. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない 終了マダー? 終了マダー? 終了マダー? 終了マダー? 4個以上同時には   処理出来ません

    同時実⾏行行数4の場合
  33. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 同時実⾏行行数5に増やした

  34. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 同時実⾏行行数5に増やした ビルドしました

  35. Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 実行待ちです… 同時実⾏行行数5に増やした ビルドしました

  36. 解決策 Jenkinsはノード事にJob制御が出来るため アップロード専⽤用ノードを作る

  37. ビルドしました ビルドしました ビルドしました ビルドしました アップロードします 解決策 ビルド数4 ビルド数1 Node-­‐A Node-­‐B

  38. リリースできなくて死ぬ

  39. リリースできなくて死ぬ 継続的デリバリーでは 細かい単位でユーザに対してリリースする 手動デプロイ サーバ 自動デプロイ ユーザ 1⽇日1回~∼1⽇日何回も

  40. リリースできなくて死ぬ スマホアプリは、直接配信ではなく、 プラットフォームに対して配信する 手動デプロイ 自動デプロイ ユーザ

  41. リリースできなくて死ぬ 新バージョン出来た リリース作業 ユーザ

  42. リリースできなくて死ぬ 新バージョン出来た リリース作業 ユーザ 公開:  最⼤大24時間 公開:  最⼤大24時間

  43. リリースできなくて死ぬ 新バージョン出来た リリース作業 ユーザ 公開:  最⼤大24時間 審査:  ⼀一週間程度度 公開:  最⼤大24時間

  44. そもそも不不可能…  (´́・_̲・`̀)

  45. ⽬目的を考える そもそも継続的デリバリーの何がいいの?

  46. ⽬目的を考える そもそも継続的デリバリーの何がいいの? リリース ユーザ

  47. ⽬目的を考える そもそも継続的デリバリーの何がいいの? リリース ユーザ ユーザの反応を⾒見見て直す

  48. ⽬目的を考える そもそも継続的デリバリーの何がいいの? リリース ユーザ ユーザの反応を⾒見見て直す ユーザの反応を、素早く得ることで、 作りすぎ等を避け、より早く ユーザにとっていいものを作れる

  49. 実際のユーザは無理理でも、 フィードバックをくれる⼈人なら意味がある 解決策 手動デプロイ 自動デプロイ

  50. 実際のユーザは無理理でも、 フィードバックをくれる⼈人なら意味がある 解決策 手動デプロイ 自動デプロイ 企画職や 別部署の⼈人

  51. 実際のユーザは無理理でも、 フィードバックをくれる⼈人なら意味がある 解決策 手動デプロイ 自動デプロイ 企画職や 別部署の⼈人

  52. ビルドが⻑⾧長すぎて死ぬ

  53. ビルドが⻑⾧長すぎて死ぬ テストは5分-‐‑‒10分、10分超えると⻑⾧長い (Rails本体ぐらい巨⼤大だと15-‐‑‒20分前後) 実行指示 コミットフック   定期実行 デプロイ テストサーバ

  54. ビルドが⻑⾧長すぎて死ぬ ビルドに最低30分かかってた

  55. ビルドが⻑⾧長すぎて死ぬ ビルドに最低30分かかってた タイミングが悪いと… ×××をビルドして!!!! コミットビルドと定期ビルド を実⾏行行中ですので、 1時間後に開始予定です

  56. つらい…  (´́・_̲・`̀)

  57. ⽬目的を考える そもそも何故詰まるほどビルドするのか? 定期的にデリバリーするため& 動かなくなった時に、素早く検知するため。 バグの早期発⾒見見で開発の効率率率を上げる為 →やっぱり待ち時間が⻑⾧長いのはまずいよね

  58. 解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする

  59. 解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる

  60. 解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる 複数台ビルドで   待ち時間短縮

  61. 解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる ⾦金金で解決! 複数台ビルドで   待ち時間短縮

  62. 解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる ⾦金金で解決! 複数台ビルドで   待ち時間短縮

    分散ビルド、静的リンク等も模索中…   Xcodeは分散できないけど
  63. まとめ この⼿手法いいよ!っていうのを 考えなしに持ってくるのと失敗する なんのためにやってるのか、⽬目的を考え、 ⼀一番あった⼿手法にきちんと落落とし込むべき 導⼊入は⼤大変だけど、 効果はかなり⾼高い気がする