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
1 CI/CDを使い倒して数段上の ソフトウェア開発しよう #circlecijp #devsumi
Slide 2
Slide 2 text
2 CI/CD 戦国時代 Google GCP Cloud Build Microsoft Azure Pipelines AWS CodeBuild GitHub Actions
Slide 3
Slide 3 text
3 CI/CD 戦国時代
Slide 4
Slide 4 text
4 最初の疑問 なぜCI/CDへの関心がこれほど高まっているのか?
Slide 5
Slide 5 text
5 自己紹介: Kim, Hirokuni (金 洋国) - 元CircleCI 開発者 - CircleCI Japan TechLead - CircleCI SRE - 灘生まれ、谷上育ち
Slide 6
Slide 6 text
6 モチベーションについて
Slide 7
Slide 7 text
7 このセッションの基本の流れ What Why Why Not Beyond
Slide 8
Slide 8 text
8 CI / 継続的インテグレーション
Slide 9
Slide 9 text
9 What is CI?
Slide 10
Slide 10 text
10 その前に確認 もちろんテストは書いてますよね?
Slide 11
Slide 11 text
11 なぜテストを書くべきか ● 何度も同じ手順を繰り返さないといけない ● 人の目や手に頼ると必ず見落としが発生する
Slide 12
Slide 12 text
12 なぜテストを書くべきか ● 何度も同じ手順を繰り返さないといけない ● 人の目や手に頼ると必ず見落としが発生する それコンピューターにやらせようよ!
Slide 13
Slide 13 text
13 CIとはテストを自動で実行する仕組み 開発者のコード変更に対して ● 常に ● 同じ環境で テストを実行してくれる
Slide 14
Slide 14 text
14 CIとはテストを自動で実行する仕組み 開発者のコード変更に対して ● 常に ● 同じ環境で テストを実行してくれる ※ テストは自分たちで用意する必要がある
Slide 15
Slide 15 text
15 Why CI?
Slide 16
Slide 16 text
16 ただテストを書くだけでは不十分 ● テストがあるけど実行し忘れた ● 昔書いたテストが壊れていて動かない ● テスト結果が環境依存
Slide 17
Slide 17 text
17 ただテストを書くだけでは不十分 ● テストがあるけど実行し忘れた ● 昔書いたテストが壊れていて動かない ● テスト結果が環境依存 テストの信頼性がない
Slide 18
Slide 18 text
18 問題: テストの実行忘れ ● リリース前にテストをしわすれる ● バグを見落とす ● 修正でリリースが遅れる
Slide 19
Slide 19 text
19 解答: 常にテストを回す ● GitHub (VCS)の変更をCI/CDが検知 ● 全変更に対してテスト実行
Slide 20
Slide 20 text
20 問題: テストが壊れてしまう ● 古いテストが壊れている ● テストが悪いのかコードがわからない
Slide 21
Slide 21 text
21 解答: 壊れたテストを素早く検知 ● テストが壊れた時点で検知 ● 直さないとマージできない (後述)
Slide 22
Slide 22 text
22 使われていない自動化は壊れていく “サイボウズを支える CircleCI”より
Slide 23
Slide 23 text
23 問題: テスト結果が環境依存 僕のマシンだとテスト通ってます (`・ω・´) キリッ
Slide 24
Slide 24 text
24 解答: CIを唯一のテスト環境にする ● 毎回同じテスト環境が構築される ● まっさらな環境でテストを実行 ● いつ実行しても同じテスト結果になる
Slide 25
Slide 25 text
25 CIの目的 テストの新陳代謝を高めて信頼性をあげる
Slide 26
Slide 26 text
26 Why NOT CI?
Slide 27
Slide 27 text
27 CI導入を妨げる問題 ● テストがない ● メンテナンス
Slide 28
Slide 28 text
28 問題: テストがない ● CIを始めたい ● でも実行するテストが存在しない ● テスト文化の布教にはコストと時間がかかる CIを導入する上でいちばんやっかいな問題
Slide 29
Slide 29 text
29 テストがない状態からCIを始める5ステップ Step 1: お好みのCI/CDツールを選ぶ Step 2: タスクの自動化 Step 3: 可視化する Step 4: マージブロック Step 5: テストを追加していく
Slide 30
Slide 30 text
30 Step 1: お好みのCI/CDツールを選ぶ
Slide 31
Slide 31 text
31 ステップ2: 様々なタスクを自動化しよう テスト以外のタスクを自動化 ● 構文チェック(linting) ● カバレッジ計測 ● 循環的複雑度のチェック ● ドキュメントの自動生成
Slide 32
Slide 32 text
32 ステップ3: 可視化しよう CI結果を可視化しよう ● ステータスバッジ ● ダッシュボードの作成 ● メール・チャットでの通知
Slide 33
Slide 33 text
33 CIやってる感が出てくる ”お、俺たちCIしてるっぽい”
Slide 34
Slide 34 text
34 Step 4: マージブロック有効化 マージするための条件をブランチごとに 指定できる機能 ● CIが通らないとマージできない ● 管理者しかマージできない ● Force Push禁止 ● Etc, etc CircleCIが通らないとマージできない
Slide 35
Slide 35 text
35 Step 5: テストの追加 少しずつテストを追加していく ● ユニットテストはとりあえず後回し ● 最も大事なビジネスロジック ● この時点では無理は禁物....
Slide 36
Slide 36 text
36 CI導入を妨げる問題 ● テストがない ● メンテナンス
Slide 37
Slide 37 text
37 問題: メンテナンス ● CI/CDツールのメンテナンスは大変 ● 通常専任のエンジニアが必要 ● CircleCIのようなクラウド型がおすすめ
Slide 38
Slide 38 text
38 クラウド型 VS オンプレミス型 クラウド型 オンプレミス型 AWS CodeBuild CircleCI GCP Cloud Build Travis CI Jenkins Concourse CI
Slide 39
Slide 39 text
39 CIのまとめ ● テストの信頼性と品質を向上させる ● テストがなくてもCIは始めれる ● できる自動化からはじめよう ● クラウド型のツールで運用コストを下げる
Slide 40
Slide 40 text
40 Beyond CI
Slide 41
Slide 41 text
41 開発フロー コードをPush
Slide 42
Slide 42 text
42 開発フロー コードをPush CIでテスト
Slide 43
Slide 43 text
43 開発フロー コードをPush CIでテスト masterへマージ
Slide 44
Slide 44 text
44 開発フロー コードをPush CIでテスト masterへマージ 自動
Slide 45
Slide 45 text
45 開発フロー コードをPush CIで自動テスト masterへマージ 自動 リリース 手動
Slide 46
Slide 46 text
46 CD / 継続的デプロイメント
Slide 47
Slide 47 text
47 What is CD?
Slide 48
Slide 48 text
48 CDとは? Continuous Deployment (継続的デプロイメント) 自動でステージング・本番環境へデプロイ Continuous Delivery (継続的デリバリー) 常にリリース可能な状態を維持する
Slide 49
Slide 49 text
49 Continuous Delivery (継続的デリバリー) リリース作業に人間の意思が介在する コードプッ シュ JARファイル CI Dockerイメージ ステージング 本番環境 人間が 決定 CD Continuous Delivery
Slide 50
Slide 50 text
50 Continuous Deployment (継続的デプロイメント) リリースに人の意思が介在しない コードプッシュ JARファイル Dockerイメージ ステージング 本番環境 Continuous Delivery CD CI CD Continuous Deployment
Slide 51
Slide 51 text
51 Why CD?
Slide 52
Slide 52 text
52 リリース後に発覚する仕様バグ ● リリースして実際に使ってみた ● ユーザーの要求を満たしていない ● 仕様が全然間違っていた
Slide 53
Slide 53 text
53 なぜこのようなことが起こるのか 本当に必要な機能はクライアント/ユーザー にも使ってみないとわからない
Slide 54
Slide 54 text
54 解答: フィードバックループを使おう ● 細かい単位でリリースする ● フィードバックを早めに得る ● カイゼンする
Slide 55
Slide 55 text
55 CDなしだとだとループが回らない ● リリースの許可が必要 ● ヒューマンエラー フィードバックループが回 らない
Slide 56
Slide 56 text
56 CDなくしてフィードバックループなし No CD, No Feedback Loop
Slide 57
Slide 57 text
57 Why NOT CD?
Slide 58
Slide 58 text
58 Why NOT CD? ● エンタープライズなアーキテクチャー ● レガシー (技術的負債が多い) アーキテクチャー そもそもシステムがCDに向いてない
Slide 59
Slide 59 text
59 解答: 時間をかけてアップデート ● サービスの疎結合 ● 徐々にモダン化 CD導入の銀の弾丸はない
Slide 60
Slide 60 text
60 CircleCIでの事例 Before: ● 常に200台以上のビルドマシンからなるフリート ● Chat Ops (hubot)でデプロイ ● およそ2日で完全に入れ替わる ● しばらく古いコードと新しいコードが混在する問題
Slide 61
Slide 61 text
61 CircleCIでの事例 1年かけて以下を実施した ● DockerとKubernetesの導入 ● マイクロサービス化
Slide 62
Slide 62 text
62 新システムにはまずCI/CDを導入しよう 家永 英治さんのブログより
Slide 63
Slide 63 text
63 CDのまとめ ● CDが回るとフィードバックループも回る ● CDに向いていないシステムはある ● 既存システムに導入が無理なら新システムから
Slide 64
Slide 64 text
64 Beyond CD
Slide 65
Slide 65 text
65 CDのその先1: 迅速なロールバック $ git revert CD 修正完了
Slide 66
Slide 66 text
66 CDのその先2: 本番環境でのテスト
Slide 67
Slide 67 text
67 テスト環境での失敗例 1週間テスト環境でテスト
Slide 68
Slide 68 text
68 テスト失敗例 1週間テスト環境でテスト ↓ リリース (完璧だ!)
Slide 69
Slide 69 text
69 テスト失敗例 1週間テスト環境でテスト ↓ リリース (完璧だ!) ↓ 本番環境のDockerのバージョンが古くて バグを踏む
Slide 70
Slide 70 text
70 テスト失敗例 Dockerのバージョンも同じにした!
Slide 71
Slide 71 text
71 テスト失敗例 Dockerのバージョンも同じにした! ↓ リリース (今度こそ完璧だ!)
Slide 72
Slide 72 text
72 例 2 Dockerのバージョンも同じにした! ↓ リリース (今度こそ完璧だ!) ↓ GitHubのAPI使用制限にひっかかる
Slide 73
Slide 73 text
73 なぜこんなことが起こるか? テスト可能部分 外部サービス ビジネス要求 仕様 トラフィック・負荷 テスト可能な部分はとても小さい!
Slide 74
Slide 74 text
74 なぜこんなことが起こるか? テスト可能部分 外部サービス ビジネス要求 仕様 トラフィック・負荷 テスト可能な部分はとても小さい!
Slide 75
Slide 75 text
75 開発者たちの重大な学び リリースしてみないと結局わからない!
Slide 76
Slide 76 text
76 デプロイとリリースの違い デプロイ コードを本番環境に配置すること リリース 配置したコードでトラフィックをさばくこと
Slide 77
Slide 77 text
77 CDのその先3: 高度なリリース手法 ● カナリーリリース ● ブルー グリーン デプロイ
Slide 78
Slide 78 text
78 CDをつかいこなすと、、、 ● 迅速なロールバック ● 本番環境でのテスト ● 高度なリリース手法 これらがもたらすものは、、、
Slide 79
Slide 79 text
79 CDをつかいこなすと、、、 ● 迅速なロールバック ● 本番環境でのテスト ● 高度なリリース手法 これらがもたらすものは、、、 プログラミングに対する 圧倒的な心理的安全
Slide 80
Slide 80 text
80 Why CD? CI/CD Makes Programming FUN!!
Slide 81
Slide 81 text
81 CI/CDの未来
Slide 82
Slide 82 text
82 CI/CDはどこへ向かうのか? CI
Slide 83
Slide 83 text
83 CI/CDはどこへ向かうのか? CI CDelivery
Slide 84
Slide 84 text
84 CI/CDはどこへ向かうのか? CI CDelivery CDeployment
Slide 85
Slide 85 text
85 CI/CDはどこへ向かうのか? CI CDelivery CDeployment ????
Slide 86
Slide 86 text
86 CI/CDはどこへ向かうのか? CI CDelivery CDeployment ???? 自動化 自動化 自動化 CI/CDの歴史は自動化の歴史
Slide 87
Slide 87 text
87 確実な自動化の未来 今手動でやっていることを意識しなくてもいい時代 ● CIやCDの設定 ● モニタリング ● デプロイ環境の構築
Slide 88
Slide 88 text
88 CI/CDの未来 $ git commit -m “First commit” && git push 最初からクライマックス!!
Slide 89
Slide 89 text
89 CircleCI ユーザコミュニティ 東京 大阪 福岡 ソウル バンコク ジャカルタ
Slide 90
Slide 90 text
90 CircleCIファンのためのコミュニティ! #circlecijp circleci.connpass.com CircleCI ユーザコミュニティ circlecijp = “学ぶ” と “つながる” ● Learn 機能だけでなく、運用のハナシも! ● Connect うまく使っている人だけでなく、 これから使う人の HUB に! ● Output あなたのアウトプットが、誰かの躓きを防ぐ! あればあるほど、自分の疑問も解消しやすい!
Slide 91
Slide 91 text
91 ご静聴ありがとうございました