Skip to main content

ワークフローでのセルフホストランナーの利用

ワークフローでセルフホステッド ランナーを使用するには、ラベル またはグループ を使用して、ジョブのランナーを指定できます。

ワークフローで使用するセルフホスト ランナーをターゲットにするには、ランナーに割り当てられたラベル、グループ メンバーシップ、またはこれらの組み合わせに基づいて、それを行います。

セルフホストランナーのラベルについて

ラベルを使うと、セルフホストランナーの共有される特徴に基づき、ワークフローのジョブを特定の種類のセルフホストランナーに送れます。 たとえば、ジョブが特定のハードウェアコンポーネントやソフトウェアパッケージを必要とするなら、カスタムラベルをランナーに割り当て、そのラベルを持つランナー上でのみ実行されるようジョブを設定できます。

ジョブにセルフホステッド ランナーを指定するには、ワークフロー ファイルでセルフホステッド ランナーのラベルを使って runs-on を設定します。

すべてのセルフホステッド ランナーに self-hosted ラベルが含まれます。 このラベルのみを使うと、セルフホステッド ランナーが選ばれます。 オペレーティング システムやアーキテクチャなど、特定の条件を満たすランナーを選ぶには、self-hosted で始まり (リストの最初にこれを示す必要があります)、必要に応じて追加のラベルを含むラベルの配列を指定することをお勧めします。 ラベルの配列を指定すると、指定したラベルをすべて持つランナーのキューにジョブが入れられます。

self-hosted ラベルは必須ではありませんが、セルフホステッド ランナーを使う場合は、自分のジョブから現在または将来の GitHub ホスト ランナーが意図せずに指定されないことを確実にするため、それを指定することを強くお勧めします。

カスタム ラベルと既定のラベルの作成については、「セルフホスト ランナーとのラベルの利用」を参照してください。

セルフホストランナーのグループについて

Organization レベルで定義されたセルフホステッド ランナーの場合は、共有特性を持つランナーを 1 つのランナー グループにグループ化して、ランナー グループをターゲットにするようにジョブを構成できます。

ご利用のジョブに対してセルフホステッド ランナー グループを指定するには、ワークフロー ファイルで runs-on.group を構成します。

ランナー グループの作成と管理について詳しくは、「グループを使用してセルフホストランナーへのアクセスを管理する」を参照してください。

メモ: すべての Organization には、単一の既定のランナー グループがあります。 追加のランナー グループを作成して管理できるのは、Enterprise アカウントと、Enterprise アカウントが所有する Organization のみです。

デフォルトラベルを使ったジョブの転送

セルフホストランナーは、GitHub Actionsに追加されたときに特定のラベルを自動的に受信します。 それらは、ランナーのオペレーティングシステムとハードウェアプラットフォームを示すために使われます。

  • self-hosted: すべてのセルフホステッド ランナーに適用される既定のラベル。
  • linuxwindows、または macOS: オペレーティング システムに応じて適用されます。
  • x64ARM、または ARM64: ハードウェア アーキテクチャに応じて適用されます。

ワークフローのYAMLを使って、これらのラベルの組み合わせに対してジョブを送信できます。 この例では、3つのラベルすべてにマッチするセルフホストランナーが、ジョブを実行する資格を持つことになります。

runs-on: [self-hosted, linux, ARM64]
  • self-hosted - セルフホステッド ランナー上でこのジョブを実行します。
  • linux - Linux ベースのランナーのみを使います。
  • ARM64 - ARM64 ハードウェア ベースのランナーのみを使います。

デフォルトラベルは固定されており、変更や削除はできません。 ジョブの転送をもっと制御する必要がある場合は、カスタムラベルの利用を検討してください。

カスタムラベルを使ったジョブの転送

カスタムラベルを作成し、セルフホストランナーに割り当てることがいつでもできます。 カスタムラベルを使えば、付けられたラベルに基づいて特定の種類のセルフホストランナーにジョブを送信できるようになります。

たとえば、特定の種類のグラフィック ハードウェアを必要とするジョブがある場合、gpu というカスタム ラベルを作成し、そのハードウェアが組み込まれているランナーに割り当てることができます。 割り当てられたすべてのラベルにマッチするセルフホストランナーが、そのジョブを実行できるようになります。

以下の例は、デフォルトとカスタムのラベルを組み合わせたジョブです。

runs-on: [self-hosted, linux, x64, gpu]
  • self-hosted - セルフホステッド ランナー上でこのジョブを実行します。
  • linux - Linux ベースのランナーのみを使います。
  • x64 - x64 ハードウェア ベースのランナーのみを使います。
  • gpu- このカスタム ラベルは、GPU ハードウェアが組み込まれたセルフホステッド ランナーに手動で割り当てられました。

これらのラベルは累積的に働くので、このジョブを処理できるセルフホスト ランナーには、4 つすべてのラベルがなくてはなりません。

グループを使用したジョブのルーティング

この例では、Ubuntu ランナーが ubuntu-runners というグループに追加されています。 runs-on キーは、ubuntu-runners グループ内の使用可能なランナーにジョブを送信します。

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: 
      group: ubuntu-runners
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

ラベルとグループを使用したジョブのルーティング

グループとラベルを組み合わせる場合、ランナーはジョブを実行する資格を得るために両方の要件を満たす必要があります。

この例では、ubuntu-runners というランナー グループに、ラベル ubuntu-20.04-16core も割り当てられている Ubuntu ランナーが設定されています。 runs-on キーは grouplabels を組み合わせて、ラベルが一致するグループ内の使用可能な任意のランナーにジョブがルーティングされるようにします。

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on:
      group: ubuntu-runners
      labels: ubuntu-20.04-16core
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

セルフホストランナーのルーティングの優先順位

ジョブをセルフホステッド ランナーにルーティングする際に、GitHub ではジョブの runs-on ラベル やグループと一致するランナーを探します。

  • GitHub によって、ジョブの runs-on ラベル またはグループ に一致するオンラインおよびアイドル状態のランナーが検出された場合は、そのランナーに、該当するジョブが割り当てられて送信されます。
    • 割り当てられたジョブをランナーが 60 秒以内に取得しない場合、新しいランナーが受け入れることができるように、ジョブはキューに再格納されます。
  • GitHub によって、ジョブの runs-on ラベル またはグループ と一致するオンラインおよびアイドル状態のランナーが検出されない場合は、ランナーがオンラインになるまで、ジョブはキューに格納されたままになります。
  • 24時間以上にわたってキューに残っていたジョブは失敗します。