Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となります: 2024-08-29. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

アクション ランナー コントローラーのクイック スタート

Actions Runner Controller を 5 分で試します。

法的通知

はじめに

Actions Runner Controller (ARC) は、GitHub Actions のセルフホステッド ランナーを調整およびスケーリングする Kubernetes オペレーターです。 詳細については、Kubernetes ドキュメントの「オペレーター パターン」を参照してください。

ARC を使うと、リポジトリ、組織、またはエンタープライズで実行中のワークフローの数に基づいて自動的にスケーリングされるランナー スケール セットを作成できます。 制御されたランナーは一時的でコンテナーに基づく可能性があるため、新しいランナー インスタンスを迅速かつクリーンにスケールアップまたはスケールダウンすることができます。 自動スケーリングについて詳しくは、「セルフホステッド ランナーによる自動スケーリング」をご覧ください。

Kubernetes で Helm を使用して ARC を設定し、ランナー スケール セットを使用するワークフローを作成して実行できます。 ランナー スケール セットについて詳しくは、「アクション ランナー コントローラーを使用してランナー スケール セットをデプロイする」を参照してください。

前提条件

ARC を使用するには、以下のものがそろっていることを確認してください。

  • Kubernetes クラスター

    • マネージド クラウド環境の場合は、AKS を使用できます。 詳しくは、Azure ドキュメントの「Azure Kubernetes Service」を参照してください。

    • ローカル セットアップの場合は、minikube または kind を使用できます。 詳しくは、minikube ドキュメントの 「minikube start」と kind ドキュメントの「kind」を参照してください。

      注: OpenShift クラスターは現在サポートされていません。

  • Helm 3

  • ARC をデプロイする必要はありませんが、実稼働ワークフローに ARC をデプロイする前に、コントローラー、リスナー、一時的ランナーからログを収集して保持する方法を実装することをお勧めします。

アクション ランナー コントローラーのインストール

  1. オペレーターとカスタム リソース定義 (CRD) をクラスターにインストールするには、以下のようにします。

    1. Helm チャートで、NAMESPACE の値を、オペレーター ポッドを作成する場所に更新します。 この名前空間では、Kubernetes API サーバーへのアクセスを許可する必要があります。
    2. Helm チャートをインストールします。

    次の例では、チャートの最新バージョンをインストールしています。 特定のバージョンをインストールするには、インストールするチャートのバージョンを指定した --version 引数を渡します。 GitHub Container Registry にリリースの一覧があります。

    Bash
    NAMESPACE="arc-systems"
    helm install arc \
        --namespace "${NAMESPACE}" \
        --create-namespace \
        oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
    

    その他の Helm 構成オプションについては、ARC ドキュメントの values.yaml を参照してください。

  2. ARC で GitHub に対して認証できるようにするには、personal access token (classic) を生成します。 詳しくは、「GitHub API に対する認証を行う」をご覧ください。

ランナー スケール セットの構成

  1. ランナー スケール セットを構成するには、ARC 構成の値を使用して、ターミナルで次のコマンドを実行します。

    コマンドを実行するときは、次の点に注意してください。

    • INSTALLATION_NAME の値は慎重に更新してください。 インストール名は、ワークフローで runs-on の値として使用することになります。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。

    • NAMESPACE の値を、ランナー ポッドを作成する場所に更新します。

    • GITHUB_CONFIG_URL を、リポジトリ、Organization、または Enterprise の URL に設定します。 これはランナーが属するエンティティです。

    • このコマンド例では、最新バージョンの Helm チャートをインストールしています。 特定のバージョンをインストールするには、インストールするチャートのバージョンを指定した --version 引数を渡します。 GitHub Container Registry にリリースの一覧があります。

      注:

      • セキュリティのベスト プラクティスとして、オペレーター ポッドを含む名前空間とは異なる名前空間にランナー ポッドを作成します。
      • セキュリティのベスト プラクティスとして、Kubernetes シークレットを作成し、シークレット参照を渡します。 CLI を介してプレーンテキストでシークレットを渡すと、セキュリティ上のリスクが生じる可能性があります。 詳しくは、「アクション ランナー コントローラーを使用してランナー スケール セットをデプロイする」を参照してください。
      Bash
      INSTALLATION_NAME="arc-runner-set"
      NAMESPACE="arc-runners"
      GITHUB_CONFIG_URL="https://github.com/<your_enterprise/org/repo>"
      GITHUB_PAT="<PAT>"
      helm install "${INSTALLATION_NAME}" \
          --namespace "${NAMESPACE}" \
          --create-namespace \
          --set githubConfigUrl="${GITHUB_CONFIG_URL}" \
          --set githubConfigSecret.github_token="${GITHUB_PAT}" \
          oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
      

      その他の Helm 構成オプションについては、ARC ドキュメントの values.yaml を参照してください。

  2. ターミナルから次のコマンドを実行して、インストールをチェックします。

    Bash
    helm list -A
    

    次のような出力が表示されます。

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                       APP VERSION
    arc             arc-systems     1               2023-04-12 11:45:59.152090536 +0000 UTC deployed        gha-runner-scale-set-controller-0.4.0       0.4.0
    arc-runner-set  arc-runners     1               2023-04-12 11:46:13.451041354 +0000 UTC deployed        gha-runner-scale-set-0.4.0                  0.4.0
    
  3. マネージャー ポッドをチェックするには、ターミナルで次のコマンドを実行します。

    Bash
    kubectl get pods -n arc-systems
    

    すべてが正常にインストールされた場合、ポッドの状態は [実行中] と表示されます。

    NAME                                                   READY   STATUS    RESTARTS   AGE
    arc-gha-runner-scale-set-controller-594cdc976f-m7cjs   1/1     Running   0          64s
    arc-runner-set-754b578d-listener                       1/1     Running   0          12s
    

インストールが成功しなかった場合、トラブルシューティング情報については、「Actions Runner Controller エラーのトラブルシューティング」を参照してください。

ランナー スケール セットの使用

次に、ランナー スケール セット ランナーを使用する簡単なテスト ワークフローを作成して実行しましょう。

  1. リポジトリに次の例のようなワークフローを作成します。 runs-on の値は、自動スケーリング ランナー セットのインストール時に使用した Helm インストール名と一致する必要があります。

    リポジトリへのワークフローの追加について詳しくは、「GitHub Actions のクイックスタート」を参照してください。

    YAML
    name: Actions Runner Controller Demo
    on:
      workflow_dispatch:
    
    jobs:
      Explore-GitHub-Actions:
        # You need to use the INSTALLATION_NAME from the previous step
        runs-on: arc-runner-set
        steps:
        - run: echo "🎉 This job uses runner scale set runners!"
    
  2. ワークフローをリポジトリに追加したら、ワークフローを手動でトリガーします。 詳しくは、「ワークフローの手動実行」を参照してください。

  3. ワークフローを実行しながら作成中のランナー ポッドを表示するには、ターミナルから次のコマンドを実行します。

    Bash
    kubectl get pods -n arc-runners
    

    成功した場合の出力は次のようになります。

    NAMESPACE     NAME                                                  READY   STATUS    RESTARTS      AGE
    arc-runners   arc-runner-set-rmrgw-runner-p9p5n                     1/1     Running   0             21s
    

次のステップ

Actions Runner Controller は、GitHub Actions ランナーを効率的に管理するのに役立ちます。 使い始める準備はできていますか。 ARC を使う次のステップに進む際は、以下のリソースが役立ちます。

Apache-2.0 ライセンスのもとで https://github.com/actions/actions-runner-controller/ から一部を引用しています。

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.