CI の実行が遅いことにイライラしている人向け。
GitHub Actions を使用して CI の実行を高速化する 3 つの方法を次に示します。
この記事では次の 3 つの方法を紹介します。
各ジョブが並行して実行されるようにジョブを分割できます。
たとえば、単体テストの実行とリンターの実行は、多くの場合独立して実行できます。
これらを 1 つのジョブに連続して記述するよりも、別々のジョブに記述する方が効率的です。
jobs:. test:. runs-on: ubuntu-22.04 steps:. ... lint: ... runs-on: ubuntu-22.04 steps: ... ...
時間のかかるパッケージのインストールプロセスをスキップするには、パッケージをキャッシュすることをお勧めします。
キャッシュプロセスを実装するには、公式のアクション/キャッシュを使用します。
以下の場合、OS、Nodeのバージョン、パッケージ情報を管理するファイル(package-lock.json)に変更があった場合のみnpm ciが実行され、それ以外の場合はキャッシュが使用されます。
- name: cache and restore packages id: cache-npm uses: actions/cache@v4.0.2 with: node_modules path: node_modules key: ${{ runner.os }}-${{ steps.tool_versions.outputs.nodejs }}-${{ hashFiles(‘**/package-lock.json’) }} - name: install npm packages if: steps.cache-npm.outputs.cache-hit ! = ‘true’ run: npm ci shell: bash
テストの実行に時間がかかる場合は、テストを分割し、それぞれを並行して実行することでプロセスを高速化できます。
たとえば、Jest の場合、マトリックス戦略とコマンド オプション --shard を使用できます。マトリックス戦略は、テストを分割して並列実行するシンプルで簡単な方法です。
マトリックス戦略は、単一のジョブ内の変数で定義された値ごとにジョブを実行する方法であり、--shard はテストを分割するオプションです。
これらを使用すると、次のようなワークフローを定義できます。
jobs: test: runs-on: ubuntu-22.04 strategy: matrix: shard: [1/4, 2/4, 3/4, 4/4] steps: - name: checkout uses: actions/checkout@v3 - name: setup environment uses: ./.github/actions/setup - name: run test run: npx jest --ci --shard=${{ matrix.shard }}
これにより、4 つのジョブが並行して実行され、それぞれがテストの 4 分の 1 を実行します。
Jest 以外に --shard のようなオプションがあるかどうかはわかりませんが、アイデア自体はどの言語にも適用できます。
CIの高速化を実現する簡単な方法として、以下の3つの方法を紹介しました。
ただし、これらに加えて、より大きなランナーを使用したり、変更が加えられた領域のみでテストを実行したりすることもできます。速度を向上させる方法は他にもたくさんあります。
時間と予算を考慮して、可能な範囲で少しずつ速度を向上させることをお勧めします。
以上がすぐにできるCI高速化【GitHub Actions】!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。