Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
何も考えずにCIや 継続的デリバリーしたら ⾟辛くなった話
Slide 2
Slide 2 text
継続的インテグレーション
Slide 3
Slide 3 text
CIのススメ リポジトリのコミットを監視して⾃自動実⾏行行 実行指示 コミットフック 定期実行
Slide 4
Slide 4 text
CIのススメ リポジトリのコミットを監視して⾃自動実⾏行行 テストやテストサーバに⾃自動デプロイ等 実行指示 コミットフック 定期実行 デプロイ テストサーバ
Slide 5
Slide 5 text
継続的デプロイのススメ たとえば毎⽇日のように、 細かく新機能をデプロイしていく⼿手法 本番サーバ 開発 deploy 一日に何回もぐらいのペースで繰り返す
Slide 6
Slide 6 text
Inspec'on Deploy Test Build CI (継続的インテグレーション) 本番サーバ 開発 deploy 一日に何回もぐらいのペースで繰り返す
Slide 7
Slide 7 text
Inspec'on Deploy Test Build CI (継続的インテグレーション) 本番サーバ 開発 deploy 一日に何回もぐらいのペースで繰り返す
Slide 8
Slide 8 text
┗(^o^ )┓ ┏┗ 最近は CIや継続的デリバリーが 流流⾏行行ってるらしいぞ
Slide 9
Slide 9 text
┏( ^o^)┛ ┛┓ このスマホアプリも 導⼊入しよう
Slide 10
Slide 10 text
┗(^o^ )┓ ┏┗
Slide 11
Slide 11 text
┏( ^o^)┛ ┛┓
Slide 12
Slide 12 text
┗(^o^ )┓ ┏┗
Slide 13
Slide 13 text
┏( ^o^)┛ ┛┓
Slide 14
Slide 14 text
三┏( ^o^)┛ 三 ┛┓ ヤルゾ
Slide 15
Slide 15 text
三┏( ^o^)┛ 三 ┛┓ | | § | | | | | § | | ___§___ | Jenkins | ▼▼▼▼▼▼▼
Slide 16
Slide 16 text
§ § § § ティウンティウンティウン § | | .§ | | | | |. §◎| | __◎§__◎ | Jenkins ◎_ | ▼◎▼ ▼◎ ▼◎
Slide 17
Slide 17 text
討ち死にました
Slide 18
Slide 18 text
何が起きたか 違う環境の⼿手法を、 ⼿手法ベースで持ってきたことで、 不不整合を起こして死んだ。
Slide 19
Slide 19 text
Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします
Slide 20
Slide 20 text
Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします アップロードします
Slide 21
Slide 21 text
Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします アップロードします アップロードします アップロードします アップロードします
Slide 22
Slide 22 text
Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードします アップロードします アップロードします アップロードします アップロードします 同時に 送るな!!!
Slide 23
Slide 23 text
Job割り当てで死ぬ Jobを分割して平⾏行行ビルドできる! アップロードの平⾏行行処理理は⼤大体出来ない アップロードします アップロードします アップロードします アップロードします アップロードします 同時に 送るな!!!
Slide 24
Slide 24 text
Job割り当てで死ぬ ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました
Slide 25
Slide 25 text
Job割り当てで死ぬ ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました アップロードします
Slide 26
Slide 26 text
Job割り当てで死ぬ アップロード処理理だけ別Job化で排他制御 ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました アップロードします
Slide 27
Slide 27 text
Job割り当てで死ぬ アップロード処理理だけ別Job化で排他制御 ビルドしました ビルドしました ビルドしました ビルドしました ビルドしました アップロードします DEAD LOCK
Slide 28
Slide 28 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない
Slide 29
Slide 29 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 同時実⾏行行数4の場合
Slide 30
Slide 30 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 実行待ちです… 同時実⾏行行数4の場合
Slide 31
Slide 31 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない 終了マダー? 終了マダー? 終了マダー? 終了マダー? 実行待ちです… 同時実⾏行行数4の場合
Slide 32
Slide 32 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない 終了マダー? 終了マダー? 終了マダー? 終了マダー? 4個以上同時には 処理出来ません 同時実⾏行行数4の場合
Slide 33
Slide 33 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 同時実⾏行行数5に増やした
Slide 34
Slide 34 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 同時実⾏行行数5に増やした ビルドしました
Slide 35
Slide 35 text
Job割り当てで死ぬ JenkinsはJobキューの制御が弱く 特定のキューのみ別の優先度度とか出来ない ビルドしました ビルドしました ビルドしました ビルドしました 実行待ちです… 同時実⾏行行数5に増やした ビルドしました
Slide 36
Slide 36 text
解決策 Jenkinsはノード事にJob制御が出来るため アップロード専⽤用ノードを作る
Slide 37
Slide 37 text
ビルドしました ビルドしました ビルドしました ビルドしました アップロードします 解決策 ビルド数4 ビルド数1 Node-‐A Node-‐B
Slide 38
Slide 38 text
リリースできなくて死ぬ
Slide 39
Slide 39 text
リリースできなくて死ぬ 継続的デリバリーでは 細かい単位でユーザに対してリリースする 手動デプロイ サーバ 自動デプロイ ユーザ 1⽇日1回~∼1⽇日何回も
Slide 40
Slide 40 text
リリースできなくて死ぬ スマホアプリは、直接配信ではなく、 プラットフォームに対して配信する 手動デプロイ 自動デプロイ ユーザ
Slide 41
Slide 41 text
リリースできなくて死ぬ 新バージョン出来た リリース作業 ユーザ
Slide 42
Slide 42 text
リリースできなくて死ぬ 新バージョン出来た リリース作業 ユーザ 公開: 最⼤大24時間 公開: 最⼤大24時間
Slide 43
Slide 43 text
リリースできなくて死ぬ 新バージョン出来た リリース作業 ユーザ 公開: 最⼤大24時間 審査: ⼀一週間程度度 公開: 最⼤大24時間
Slide 44
Slide 44 text
そもそも不不可能… (´́・_̲・`̀)
Slide 45
Slide 45 text
⽬目的を考える そもそも継続的デリバリーの何がいいの?
Slide 46
Slide 46 text
⽬目的を考える そもそも継続的デリバリーの何がいいの? リリース ユーザ
Slide 47
Slide 47 text
⽬目的を考える そもそも継続的デリバリーの何がいいの? リリース ユーザ ユーザの反応を⾒見見て直す
Slide 48
Slide 48 text
⽬目的を考える そもそも継続的デリバリーの何がいいの? リリース ユーザ ユーザの反応を⾒見見て直す ユーザの反応を、素早く得ることで、 作りすぎ等を避け、より早く ユーザにとっていいものを作れる
Slide 49
Slide 49 text
実際のユーザは無理理でも、 フィードバックをくれる⼈人なら意味がある 解決策 手動デプロイ 自動デプロイ
Slide 50
Slide 50 text
実際のユーザは無理理でも、 フィードバックをくれる⼈人なら意味がある 解決策 手動デプロイ 自動デプロイ 企画職や 別部署の⼈人
Slide 51
Slide 51 text
実際のユーザは無理理でも、 フィードバックをくれる⼈人なら意味がある 解決策 手動デプロイ 自動デプロイ 企画職や 別部署の⼈人
Slide 52
Slide 52 text
ビルドが⻑⾧長すぎて死ぬ
Slide 53
Slide 53 text
ビルドが⻑⾧長すぎて死ぬ テストは5分-‐‑‒10分、10分超えると⻑⾧長い (Rails本体ぐらい巨⼤大だと15-‐‑‒20分前後) 実行指示 コミットフック 定期実行 デプロイ テストサーバ
Slide 54
Slide 54 text
ビルドが⻑⾧長すぎて死ぬ ビルドに最低30分かかってた
Slide 55
Slide 55 text
ビルドが⻑⾧長すぎて死ぬ ビルドに最低30分かかってた タイミングが悪いと… ×××をビルドして!!!! コミットビルドと定期ビルド を実⾏行行中ですので、 1時間後に開始予定です
Slide 56
Slide 56 text
つらい… (´́・_̲・`̀)
Slide 57
Slide 57 text
⽬目的を考える そもそも何故詰まるほどビルドするのか? 定期的にデリバリーするため& 動かなくなった時に、素早く検知するため。 バグの早期発⾒見見で開発の効率率率を上げる為 →やっぱり待ち時間が⻑⾧長いのはまずいよね
Slide 58
Slide 58 text
解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする
Slide 59
Slide 59 text
解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる
Slide 60
Slide 60 text
解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる 複数台ビルドで 待ち時間短縮
Slide 61
Slide 61 text
解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる ⾦金金で解決! 複数台ビルドで 待ち時間短縮
Slide 62
Slide 62 text
解決策 待ち時間を早くするには ・ビルド時間を減らす ・並⾏行行処理理をする コードで頑張るには ⼿手間がかかる ⾦金金で解決! 複数台ビルドで 待ち時間短縮 分散ビルド、静的リンク等も模索中… Xcodeは分散できないけど
Slide 63
Slide 63 text
まとめ この⼿手法いいよ!っていうのを 考えなしに持ってくるのと失敗する なんのためにやってるのか、⽬目的を考え、 ⼀一番あった⼿手法にきちんと落落とし込むべき 導⼊入は⼤大変だけど、 効果はかなり⾼高い気がする