このブログはこちらの英語ブログの機械翻訳です。
Kaisha ga kakudai suru ni tsurete, seihin ha masumasu fukuzatsu ni nari, kibishii tesuto o jisshi to anteisei o kakuho ga fukaketsu to narimasu.Okta がその課題に直面するのは初めてではありません。kaihatsu saikuru no soki no dankai de mondai wo kyacchi suru tame ni, renzoku integureeshon(CI) shisutemu no kaihen goto ni juuman ken ijo no tesuto wo jikkou shimasu.
当社の運用規模は非常に大きく、当社のサービスは年間50万件以上のコミットを受け取っています。しかし、私たちでさえ、モノリシックなコードベースにおけるテストの不安定さという問題に直面してきました。当社のメインラインコミットのパス率は、不安定なテストによるコミットの初回実行では40%未満でした。問題が発生した時期を把握し、他のエンジニアの作業を妨げず、対応するチームに直ちに連絡して調査するための信頼できる方法が必要でした。
手動プロセス
これまで、この問題に対する部分的な解決策は、メインブランチのコミットがCIでテストに合格したか失敗したかをオンコールのエンジニアが見守ることでした。メインでテストが失敗した場合、ログとスタックトレースを分析して失敗の妥当性を判断し、適切なチームに相談する必要がありました。そしてその後、適切なチームに相談する必要がありました。
毎週月曜日、オンコールエンジニアは過去1週間の障害をレビューし、Jiraチケットのリストを手動で作成し、障害に関するデータを収集して、エンジニアリングチームにメールを送信していました。しかし、このアプローチには明らかな欠点がありました。
- 人的エラーにより、失敗が見過ごされたり、見落とされたりする可能性があります。
- エンジニアは根本原因を突き止め、問題を修正するために誰が知識とコンテキストを持っているかを見つけ出す必要があったため、時間がかかりました。
- オンコールエンジニアは、多くの時間をトレーニングに費やす必要がありました。この役割を果たすには、毎年4か月分のエンジニアリング時間が必要です。
- 信頼性も拡張性もありませんでした。
- 多くの集合的な知識が必要です。たとえば、障害を発見するために、多数のレガシーな手作業で作成されたSQLクエリがあります
緊急の故障とは何ですか?
このプロセスを確実にするには、緊急のブレークと緊急でないブレークを構成するものを判断するための厳格な方法が必要でした。最初のシナリオをP0と呼びます。すぐにメインで失敗したすべてのテストに対処しないのはなぜだろうと思われるかもしれません。それは理想的な環境で起こるでしょう(私たちは今それに近づいています)が、私たちが実行する数十万のテストのうち、非常に多くのテストが一貫性なく失敗すること(これらは「不安定」と言われています)は驚くことではありません。他のチームのエンジニアに、すべてを中断して数百の不安定なテストを修正するように指示するのは、不合理で非現実的です。
私たちの当面の解決策は、テストの失敗頻度の割合基準に基づいてP0を見つけることでした。ただし、これは遅行指標であり、テストが完全に失敗した場合、レポートに大幅な遅延が発生します。実際の中断をすぐに検出し、不安定なテストを段階的に解決する方法が必要でした。数え切れないほどのシミュレーションを実行するプログラムを作成した後、最終的に解決策に到達しました。
私たちの最初のソリューション:最後の5回の実行で2つのコミットで失敗した場合、または少なくとも100回の実行で25%以上の時間失敗した場合、テストメソッドのチケットをP0として提出します。
問題の範囲を明確に定義したので、ついに自動化できます。
AutoGuardian のご紹介
AutoGuardianは、テストを定期的に監視して障害を処理する当社のサービスです。以下に、その責任の簡単な概要を示すチャートを示します。
AutoGuardianの利点は変革をもたらし、チームの日常業務を大幅に強化しています。問題の特定と報告、コミュニケーションの合理化、他の開発者のテスト失敗を防ぐ別のサービスへの接続を行います。
テストの除外は、開発者が破損したテストのためにマージをブロックされないようにし、すでに障害があることがわかっているテストで不必要な実行を回避することでコストを削減するのに役立つため、非常に重要です。つまり、AutoGuardianを使用すると、チームはトラブルシューティングに没頭するのではなく、進捗に集中できるため、開発プロセスがより効率的かつ効果的になります。
AutoGuardianは現在、当社が依存する重要なサービスであり、推定年間 1,000,000ドル以上のコスト削減を実現しています。これは最初の設計にすぎませんでした。その後、同様のスタックトレースによる問題のグループ化、自動基準の厳格化、および強化されたデータレポートを追加することで、さらに改善しました。その結果、AutoGuardianの前と比較して、1900%以上も多くの不安定なテストをキャッチし、メインラインの合格率を80%以上に向上させました。この変革により、開発プロセスが合理化され、コミットのランタイムが50%削減され、エンジニアはトラブルシューティングではなくイノベーションに集中できるようになり、より生産性の高い開発者エクスペリエンスが促進されます。
自動化でプロセスを革新
ほとんどのハイテク企業には何らかのオンコールプロセスがあり、可能な限り自動化に努めるべき理由の1つの例を提供しました。何かを手動で行う必要がある場合は、常に自分自身や他の人に「なぜ?」と自問してください。自動化を導入すると、貴重な開発者の時間を節約でき、製品の回復力、信頼性、セキュリティが向上します。
このブログ記事についてご質問はありますか?eng_blogs@okta.comまでお問い合わせください。Oktaのより洞察力に富んだエンジニアリングブログを探索して、知識を広げてください。
私たちの情熱的な卓越したエンジニアのチームに参加する準備はできましたか?私たちの採用情報ページをご覧ください。