Skip to content
Latchkey

GitHub Actions のサービスコンテナとは?

サービスコンテナは GitHub が job のそばで実行する Docker コンテナで、通常はテストが接続するデータベースやキューです。

統合テストでは、本物の Postgres や Redis が必要になることがよくあります。サービスコンテナはそうした依存先を job の存続期間中コンテナとして起動し、step から到達できるようネットワーク接続します。

概要

job の services: キーの下で宣言されるコンテナです。GitHub は step が実行される前にこれを起動し、job のネットワーク経由で到達できるようにします。

A Postgres service
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: pw
        ports: ['5432:5432']
    steps:
      - run: psql -h localhost -U postgres -c '\\l'

仕組み

GitHub は各サービスコンテナを起動し、要求したポートをマッピングし、step を実行する前に待機します。step は localhost とマッピングされたポート(コンテナ job ではサービス名)で接続します。

ヘルスと準備状態

health check オプションを追加すると、GitHub がサービスの準備が実際に整うまで待つようになり、job の開始時に起きる不安定な接続エラーを避けられます。

なぜ重要か

サービスコンテナは、外部インフラをプロビジョニングせずにテストへ本物の依存先を提供します。再現性があり、隔離され、job が終わると自動的に破棄されます。

関連する概念

サービスコンテナは job と同じ runner 上で実行され、完全な統合セットアップのために actions/checkout などの action を補完します。

重要なポイント

  • サービスコンテナは job のそばで実行される Docker の依存先です。
  • services: の下でイメージとポートを指定して宣言します。
  • step が準備完了まで待つよう health check を使います。

関連ガイド