Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カオナビのDevOps実践

 カオナビのDevOps実践

Yoshiyuki Ishikawa

April 20, 2022
Tweet

Other Decks in Technology

Transcript

  1. © kaonavi Inc. 2 登壇者紹介 石川 善幸
 グループマネージャー
 櫛田 陽介


    ProductivityLeadエンジニア 
 棚橋 敬
 グループマネージャー

  2. • 石川 善幸(いしかわ よしゆき) • 所属 プロダクト本部 SRE部 ProductivityG マネージャー

    • 担当業務 開発チームにおける生産性の向上支援 • 好きなもの 猫、日本酒 自己紹介
  3. • 棚橋 敬(たなはし けい) • 所属 プロダクト本部 オペレーションG マネージャー • 担当業務

    本番環境に関する運用業務全般やディレクション • 好きなもの 銭湯、パン、クラフトコーラ 自己紹介
  4. © kaonavi Inc. 11 社内Webアプリの構築 背景・課題 - カオナビではお客様毎の環境をセットアップするために 本番環境にログインしてから都度シェルを実行 -

    お客様の環境を破棄する場合も本番環境に ログインしてから都度シェルを実行 - プラン変更やオプション変更をするときも都度シェルを実行
  5. © kaonavi Inc. 14 社内Webアプリの構築 対応 - エンジニアが本番環境にログインして環境構築や破棄を しないで済むように社内Webアプリを構築 -

    アプリの利用者は営業担当 - 契約内容をSalesforce側から引っ張ってくることで 入力作業をなくす - 営業のメンバーが契約内容を確認して ボタン1つで環境構築ができるように
  6. © kaonavi Inc. 16 社内Webアプリの構築 作業コストが改善できた  - もともとSalesforce側には契約情報があるため、 営業担当がRedmineの起票への転記作業がなくなった -

    起票してからエンジニアがチケットを 確認するまでのタイムラグもなくなった - エンジニアが本番環境にログインして シェルを実行する必要がなくなった - マルチテナントに対する考慮をサービス側に もたせることができた
  7. © kaonavi Inc. 17 社内Webアプリの構築 今後の展望  - 運用業務を社内サービス化していく余地はまだまだたくさんある - 現行でも他にも機能がある

    - 調査時のログ取得機能(開発者向け) - 調査時のdumpファイル取得機能(開発者向け) - まずは既存の定常業務のサービス化 - 作業者がミスをしないようなシステムを心がける - 目的は効率化・業務改善であることを忘れない
  8. © kaonavi Inc. 20 リリース作業の効率化 背景・課題 - リリース作業そのものの手作業が多い - ステージング環境用にビルド・リリースのシェルを実行

    - 本番環境用にビルド・リリースのシェルを実行 - リリース作業担当者が作業の進み具合をSlackに共有 - 属人化...
  9. © kaonavi Inc. 22 リリース作業の効率化 対応 - シェルをCode Build /

    Code Deployに移植して、CodePipelineを使ってリリース をできるように - GitLab側のジョブでs3にソースをアップロードすることがトリガー - パイプラインの進捗状況をSlackへ通知
  10. • 櫛田 陽介(くしだ ようすけ) • 所属 プロダクト本部 ProductivityG Tech Lead

    • 担当業務 E2Eテスト開発全般 テスト設計、コーディング、レビュー、ツール導入、 メンバのサポート&育成 • 甘党、ウクレレ弾き 自己紹介
  11. © kaonavi Inc. 29 戦略 メインとする大きな2軸 1. 既存テスト(後ほど紹介)の安定化、メンテナンス 2. 広く浅いテストの新規作成

    その他、メインではないものは都度検討 ・インシデント再発防止のテスト ・手動ではつらいテスト
  12. © kaonavi Inc. 30 1. 引き継いだコードの安定化、メンテナンス 巻き取り、運用体制を作る ・59/159 が不安定で動作しない ・環境依存の排除、リファクタリング

    ・CI環境整備  ・インスタントなdocker環境 ・リリース物に対して日次でテストを流せるように  ・リリースフロー、パイプライン整備 ・QA組織の非プログラマが作っていた E2Eテストコードがあった ・メンテできる人間が少なく、手が回らない状態になっていた
  13. © kaonavi Inc. 33 課題: 環境依存 課題: ・特定の共用環境でしか動かない ・複数人が同時に実行できない・開発できない ・そこにあるデータが正、壊れたら戻せない

    対応: ・ハードコードから環境変数化 ・ローカル開発環境整備 ・テストデータを抽出、初期化可能に ・誰でもいつでも開発・実行ができる状態になった
  14. © kaonavi Inc. 34 課題: リリース前にテストが実行されていない 課題: ・リリース後、特定環境で日次実行されていた  ・masterブランチを定期的にデプロイ ・リリース前にデグレを検知できていない

    対応: ・リリースフロー、パイプラインを整備 ・リリース物に対して、リリース前に日次実行(夜間)するようにした ・リリース前にバグが検出できる状態になり、安全度が上がった
  15. © kaonavi Inc. 35 課題: 不安定 課題: ・実行するたびに、成功したり失敗したり  ・全体の3割以上 ・乗せてみたはいいものの、毎日赤い

    CI ・ノイズであり、調査コストがかさむ 対応: ・長い目で見ながら地道にテストコードを修正 ・プロダクトの仕様変更や、 CI環境のスペック変動なども成功率に影響する ・現在は月に0~数回程度の発生に収まり、無駄な調査コストを削減できた ・発生ベースで対応
  16. © kaonavi Inc. 37 課題: 大量にメモリを消費 課題: ・4シナリオの実行に2GB以上消費して、1プロセスに乗らなかった ・解決できずテストスイートが細かく分割されていた  ・テスト結果のマージをする必要があったり煩雑

    対応: ・インスタンスキャッシュ、リファクタリング ・159シナリオが400MB前後で流れ切るように ・速度も改善した ・シンプルな状態、あるべき状態になった
  17. © kaonavi Inc. 39 課題: 同様の修正があちこちで発生 課題: ・不安定の修正も、仕様変更に対する修正も ・画面操作のための(長い)実装がばらけている 対応:

    ・PageObjectモデルを採用、画面操作をライブラリ化  ・修正範囲が狭くなり、より沢山のテストを運用可能になった
  18. © kaonavi Inc. 40 課題: CI環境固有のトラブル 課題: ・ローカル開発環境の仕組みを CI環境上に立てたら、CI環境でだけ発生 ・ファイル書き込み時、一定確率でエラー

    ・dockerの共有ボリュームで、 ファイルシステムのオーナ周りの挙動が違った  ・ホストが windows/mac のローカル開発環境では発生しない  ・ホストが linux のCI環境でだけ発生した 対応: ・オーナを合わせる対応 ・細々とログを仕込みながらトライ&エラーを繰り返して潰した
  19. © kaonavi Inc. 41 課題: データ量が増えて遅くなる 課題: ・テストデータが増えてゆき、初期化処理に時間がかかるようになった  ・RDB、検索エンジン ・全件見るようなシナリオ

    対応: ・思い切ってデータ量を削減、 作成済みのシナリオもデータに追従 ・広く浅いテストについては、 2ページ分程度あればいい ・全件見るようなシナリオは厳選
  20. © kaonavi Inc. 42 課題: 必ず学習コストが発生する 課題: ・みんな初めてのE2Eなので慣れるまで時間がかかる ・メンバー入れ替わりのたびに毎回発生 ・希望者も少ない

    対応: ・オンボードコストを下げる努力  ・ナレッジをひたすらドキュメント化 ・ライブコーディングやペアプロでスキルの均一化 ・テストSaaSでローコードも視野に ...?
  21. © kaonavi Inc. 45 効果まとめ 実施前 実施後 テスト実行条件 特定条件を揃える必要あり 誰でもいつでも実行可能

    バグ検出タイミング リリース後 リリース前 不安定起因の失敗数 40前後/月 0~数回/月 メンテナンス 追い付かず 仕様変更に追従しながら拡充できてい る テスト工数 (人間の時間) 6~7時間 0~1時間 その他 潜在バグの検出
  22. © kaonavi Inc. 47 約280シナリオのテストをいつでも実行できる状態になった ・日次のCIジョブ  ・明日のリリース対象  ・直近のリリース対象 ・ほかにも、影響範囲の広い改修をする場合など  ・影響範囲の広い、開発中の

    featureブランチ  ・言語やフレームワークのアップデート  ・M1用のdockerの開発環境での動作確認 人の手はかからない ・裏で、夜中に、流しておくが可能