継続的インテグレーションのベストプラクティス
継続的インテグレーション(CI)は、開発チームの生産性を向上させ、全体的なコード品質を改善するのに役立ちます。しかし、CIの導入は迅速なデプロイを実現するための一歩に過ぎません。CIシステムを最大限に活用するためには、ワークフローに継続的インテグレーションのベストプラクティスを取り入れることが重要です。
継続的インテグレーションシステムでは、広く利用可能なドキュメントが提供されており、ワークフローにCIを導入した後も長期間にわたって大いに役立ちます。GitLabでは、詳細なCI/CDドキュメントを提供しており、頻繁に更新して最新のプロセスを反映しています。
ReadMeなどのアクセスしやすい形式でドキュメントをまとめておくと便利であるため、おすすめです。チームメンバーには、まずはドキュメントを読んでから、リンクをブックマークしたり、FAQを作成したり、新しいチームメンバーのオンボーディング時にこれらのリソースを活用したりするように促しましょう。
CIパイプラインには、ジョブとステージが含まれています。ジョブとは、特定のステージ内で実行されるアクティビティを指し、すべてのジョブが成功すると、コードは次のステージに進みます。CIパイプラインを最大限に活用するために、ステージを最適化して、失敗の原因となる箇所を容易に特定して修正できるようにしましょう。
ステージを活用すれば、類似するジョブを容易に整理できます。しかし、パイプラインには、失敗した場合でもプロジェクトに悪影響を及ぼすことなく、初期ステージでは安全に実行できるジョブがいくつか存在する場合があります。CIパイプラインのスピードを向上させるために、これらのジョブを初期ステージで実行することを検討しましょう。
パイプラインの速度を低下させる最大の原因は複雑性です。ビルドが迅速に実行されるようにすることを心がけましょう。そのためには可能な限りシンプルにすることをおすすめします。
ビルド時間を1分短縮すれば、デベロッパーがコミットするたびに1分ずつ節約できます。CIでは頻繁にコミットを行うため、この時間は着々と膨らんでいきます。Martin Fowler氏は、現代のほとんどのプロジェクトで実現可能な10分間ビルドのガイドラインについて説明しています。継続的インテグレーションでは頻繁にコミットが行われるため、ビルドのコミットにかかる時間を節約することで、デベロッパーの作業時間を大幅に節約できます。
改善はプロセスです。チームが失敗への対応の仕方を変えると、継続的改善につながる文化への移行が始まります。失敗の原因が誰にあるかではなく、何にあるかを問うことが重要です。これにより、責める文化から学ぶ文化へと変わります。
チームが頻繁にコミットを行う場合、問題を特定して解決するのがはるかに容易になります。失敗するビルドに共通するパターンがある場合、その根本原因が何であるかを調べましょう。コード以外の無関係なエラーによってビルドの失敗が発生していないか確認し、場合によってはallow_failure
パラメータの追加を検討しましょう。失敗しても誰かを責めるのではなく、原因を探り、継続的に改善する方法を見つけましょう。
継続的インテグレーションでは、コミットごとにビルドがトリガーされます。トリガーされたビルドでは、コード変更によって破損するものがないかを確認するために、テストが実行されます。 テストピラミッドは、デベロッパーがテストのバランスを保つ方法を考える際に用いる手法です。E2Eテストは主に安全策として使用されます。このうち、ユニットテストはエラーを特定する際にもっとも頻繁に用いられます。テストの際に注意すべき重点事項は、環境です。テスト環境と本番環境が一致していれば、デベロッパーはその結果を信頼し、自信を持ってデプロイできます。
GitLabのReview Appsを利用すれば、本番環境に近いライブ環境に新しいコードをデプロイし、コード変更をプレビューできます。この機能は、デベロッパーが変更の影響を評価する際に便利です。
継続的インテグレーションを採用することで、デベロッパーのデプロイ速度が向上し、フィードバックがより迅速に提供されるようになります。結局のところ、最適な継続的インテグレーションシステムは、チームが実際に使用するシステムです。ニーズに合わせて最適なCIを見つけて、ご紹介したベストプラクティスを取り入れることで、新しいCIワークフローを最大限に活用しましょう。
フォーチュン100企業の50%以上がGitLabを信頼
より優れたソフトウェアをより速く提供
インテリジェントなDevSecOpsプラットフォームで
チームの可能性を広げましょう。