DEV Community 日本語 フォロー GitHub Actions CIが遅い理由(そして高速化する方法) GitHubでの最近のデータベースバックアップの失敗は、一般的な問題、つまりCIワークフローの遅延または失敗を浮き彫りにしました。完全に失敗するのと異なり、遅延する実行はしばしば見過ごされ、リソースの無駄につながります。人気のあるオープンソースリポジトリのスキャンにより、CI構成における広範な非効率性が明らかになりました。多くのプロジェクトでは、同時実行制御やジョブタイムアウトなどの重要な設定が欠けており、その結果、ワークフローが重複していました。大きな問題は、プッシュとプルリクエストの両方でワークフローをトリガーすることであり、同じ変更に対して実行が重複します。これは、デフォルトブランチを除き、プルリクエストでのみトリガーすることで解決できます。もう1つの一般的な問題は、新しいコードがプッシュされたときに進行中の実行をキャンセルできないことであり、キューのスロットの無駄につながります。cancel-in-progressをtrueに設定した同時実行グループを実装することで、これを防ぐことができます。実行ごとに依存関係をゼロから再インストールすることも、かなりの時間を追加します。セットアップアクションのキャッシング機能を利用することで、このプロセスを大幅に高速化できます。過度に大きなマトリックス、すべてのOSバージョンの組み合わせでのテストは、プルリクエストにはよりスリムなマトリックスを実行し、デフォルトブランチまたはナイトリービルドには完全なマトリックスを実行することで最適化できます。CIトリガーを特定のファイルパスにスコープしないということは、ドキュメントのタイプミスであっても、あらゆる変更がテストスイート全体をトリガーする可能性があることを意味します。さらに、タイムアウトのないジョブは数時間ハングし、過剰なリソースを消費する可能性があります。各ジョブにtimeout-minutesを設定することが不可欠です。これらの一般的なCIの非効率性を特定するために、パブリックリポジトリをスキャンできるツールが利用可能です。人気のあるプロジェクトのアクションスコアカードを確認することも、ベストプラクティスに関する洞察を提供できます。著者は、パブリックリポジトリでこれらのパターンを特定するのに役立つ無料のスキャナーを提供しています。 Why your GitHub Actions CI is slow (and how to speed it up) dev.to
cancel-in-progressをtrueに設定した同時実行グループを実装することで、これを防ぐことができます。実行ごとに依存関係をゼロから再インストールすることも、かなりの時間を追加します。セットアップアクションのキャッシング機能を利用することで、このプロセスを大幅に高速化できます。過度に大きなマトリックス、すべてのOSバージョンの組み合わせでのテストは、プルリクエストにはよりスリムなマトリックスを実行し、デフォルトブランチまたはナイトリービルドには完全なマトリックスを実行することで最適化できます。CIトリガーを特定のファイルパスにスコープしないということは、ドキュメントのタイプミスであっても、あらゆる変更がテストスイート全体をトリガーする可能性があることを意味します。さらに、タイムアウトのないジョブは数時間ハングし、過剰なリソースを消費する可能性があります。各ジョブにtimeout-minutesを設定することが不可欠です。これらの一般的なCIの非効率性を特定するために、パブリックリポジトリをスキャンできるツールが利用可能です。人気のあるプロジェクトのアクションスコアカードを確認することも、ベストプラクティスに関する洞察を提供できます。著者は、パブリックリポジトリでこれらのパターンを特定するのに役立つ無料のスキャナーを提供しています。