ドキュメントメニュー
マネージドランナー
ワークフローファイル
トラブルシューティング
症状別の解決策: キューで止まったジョブ、空のダッシュボード、表示されないインサイト、ブロックされたサインインなど。
要点
- ジョブがキューで止まる = ラベル、モニタリング、設定、請求、イメージビルド、または同時実行のいずれか。この順序で確認してください。
- 空のダッシュボードは、ほぼ常にデータの消失ではなくフィルターやバックフィルのタイミングが原因です。
- ブロックされた状態には必ず明確な兆候があります: バナー、通知ベル、またはアクティベーション画面です。

以下の各セクションは1つの症状を扱い、確認する価値が高い順に原因を並べています。ほとんどの問題はどこかで自らを知らせます: ダッシュボードのバナー、ベルの通知、またはモーダルのステータスです。この表は、まずどこを見ればよいかを示します。
| 症状 | 最初に確認すること | 場所 |
|---|---|---|
| ランナーを対象とするジョブがキューのままになる | 正確なラベル文字列 | Latchkey Runnersページの「Your runners」テーブル |
| ダッシュボードにデータが表示されない | リポジトリが選択されているか | Command & Control の Filters |
| AIインサイトがない | 処理中バナーと分析ブランチ | Insightsページとモニタリングモーダル |
| ランナーの起動がブロックされる | トライアル、サブスクリプション、無料枠の状態 | Billing ページと「Managed runner blocked」または「Free tier running out」通知 |
| アクセスが突然ブロックされる | サブスクリプションのステータス(トライアル終了、Past Due、Canceled) | アクティベーション画面または Billing ページ |
Latchkeyランナーを対象とするジョブがキューのままになる#
これは、ランナーのプロビジョニングを妨げるあらゆる事象に共通する症状です。GitHubは、一致するラベルを持つランナーがジョブを取得するまでジョブを「キュー」に保ちます。そしてLatchkeyが起動をブロックまたはルーティングできない場合、GitHub側にエラーは表示されず、ジョブは単に待機します。つまり診断は常にLatchkey側で行われます。何も問題がないときにプロビジョニングがウォームピックアップとコールドスタートのどちらを選ぶかについては、プロビジョニングの仕組みを参照してください。次の順序でトリアージしてください:
- 01ラベルは正しい?正確なプリセットまたはカスタムラベル、タイプミスなし
- 02リポジトリは監視中?モニタリングモーダルを確認
- 03設定は有効?無効な設定はジョブの受け付けを停止します
- 04請求は問題なし?トライアル、サブスクリプション、無料枠の状態
- 05イメージは準備完了?カスタムランナーのビルドには時間がかかります
- 06上限に達している?すべてのワークスペースは40件の同時ジョブから始まります(Launchプランの数値)
ラベルのタイプミスを除外する
ラベルは正確に latchkey-small、latchkey-medium、latchkey-large、latchkey-xlarge、またはカスタムラベルのいずれかである必要があります。確認方法: Latchkey Runnersページの「Your runners」テーブルには正確な文字列が表示されます。ワークフローファイルと1文字ずつ比較してください(余分なスペースや誤ったハイフン1つでも一致しなくなります)。両方のラベル形式は同一にルーティングされるため、runs-on: latchkey-small と runs-on: [self-hosted, latchkey-small] は同じように動作します。配列形式が問題ではありません。
リポジトリが監視されていることを確認する
マネージドランナーは監視されているリポジトリのみを扱うため、監視されていないリポジトリからのジョブは永遠に待機します。確認方法: ダッシュボードのサイドバーからモニタリングモーダルを開き(オーナーおよび管理者)、リポジトリのトグルを確認します。プランのリポジトリ上限に達している場合、それ以上のトグルはブロックされ、モーダルがアップグレードを案内します。リポジトリの管理を参照してください。Latchkey CIのジョブについては、各 failure_reason の意味を参照してください。
ランナー設定が有効になっているか確認する
無効な設定は新しいジョブの受け付けを停止し、そのラベルを対象とするジョブはキューに入ります。確認方法: Runnersページの設定行に、プリセットとカスタムランナーの両方について有効/無効の状態が表示されます。
トライアル、サブスクリプション、無料枠の状態を確認する
期限切れのトライアル、失効した(past dueまたはcanceled)サブスクリプション、またはカードなしトライアルで使い切った無料枠は、いずれも新しいランナーの起動をブロックします。使い切った無料枠では、実行中のジョブも停止され、プランが始まるまで新しいジョブが保留されます。確認方法: 通知ベルで「Managed runner blocked」通知(期限切れのトライアルまたは失効したサブスクリプション)か、その月の「Free tier running out」通知(使い切った無料枠)を探し、Billing ページを開きます。トライアル通知と無料枠メーター、または past due や canceled のサブスクリプションが移るアクティベーション画面が、どのケースかを示します。サブスクライブするか、Stripeポータルで支払い方法を修正すると、次のディスパッチで起動が復元されます。通常は1分以内です。ランナーの使用状況と無料分を参照してください。Latchkey CIのジョブについては、各 failure_reason の意味を参照してください。
カスタムイメージがまだビルド中かどうか確認する
新しいカスタム設定を対象とするジョブは、そのイメージのビルドが完了するまで待機します。確認方法: Runnersページの設定行にイメージのビルドステータスが表示され、ランナーの準備が完了した際("AI scan runner is ready")、またはビルドが失敗した際に通知されます。カスタムランナーを参照してください。
同時実行の上限を確認する
あなたのワークスペースの同時ジョブの上限がすでに埋まっている場合(すべてのワークスペースは40から始まり、これはLaunchプランの数値です。アイドル状態のウォームランナーとパーク済みランナーはスロットを占有しません)、それ以上のジョブは空きを待ちます。確認方法: これは多数のワークフローがリポジトリ全体で一度に発火したときに現れ、実行中のジョブが終わるにつれてキューに入ったジョブが自動的に開始します。より高い上限も利用可能です。制限と同時実行を参照してください。
ダッシュボードにデータが表示されない#
空のダッシュボードは、ほぼ常にフィルターやタイミングを意味し、データの消失ではありません。次の順序で確認してください:
- リポジトリが選択されていない。 Command & Control は Filters で選択されたリポジトリを表示します。確認方法: リポジトリが選択されていない場合、ワークフローのセレクターは無効になり、"Select a repository first" と表示されます。Reset filters (Easy では Reset) はすべてのリポジトリとワークフローを再び選択し、Date range のウィンドウを直近30日に戻します。
- バックフィルがまだ実行中。 新しく有効化されたリポジトリは、まず最近の履歴をインポートし、ほとんどのチームは数分以内にデータを目にします。確認方法: インポートが完了するまでバックフィルの進捗バナーがダッシュボードに表示されます。バナーが消えるのを待ってからページを判断してください。
- 期間内に実行がない。 バックフィルは過去30日間の完了した実行を対象とし、Date range のウィンドウは実際のアクティビティと重なる必要があります。確認方法: GitHubでのリポジトリの最近のワークフロー実行から、直近の実行がバックフィル期間より前かどうかがわかり、前であれば、新しい実行が発生するまでページは空のままです。既定のウィンドウである直近30日間は、バックフィル期間と一致します。
- アプリが誤った組織にインストールされている。 GitHub Appがリポジトリを所有する組織にインストールされていない場合、イベントはまったく届きません。確認方法: GitHubで組織のSettings、次にGitHub Appsを開き、Latchkeyがそこに表示されていることを確認します。正しい組織にインストールして修正してください。GitHub Appのインストールを参照してください。
AIインサイトが表示されない#
インサイトの生成は自動かつイベント駆動であり、押すボタンはありません。エージェントは、新しく監視されたリポジトリの初回バックフィル後、分析ブランチでワークフローファイルが変更されたとき、連続した繰り返し失敗のとき、コストの急増のとき、そしてパフォーマンスの低下のときに実行されます。したがって「インサイトがない」は通常、トリガーがまだ発火していないか、エージェントがあなたとは異なるブランチを見ていることを意味します:
- 分析がまだ実行中、またはまだトリガーされていない。 インサイトはバックフィル完了後に自動的に生成されます。確認方法: エージェントの実行中、Insightsページに処理中バナーが表示されます。新しいリポジトリには数分の余裕を与えてください。
- 分析ブランチが誤っている。 分析は、モニタリングモーダルで選択された分析ブランチ(デフォルトではリポジトリのデフォルトブランチ)に従います。他のブランチにのみ存在するワークフローは分析されません。確認方法: モニタリングモーダルを開き、リポジトリの横にあるブランチピッカーを確認します。リポジトリの管理を参照してください。
- 本当に言うことが少ない。 小規模またはめったに実行されないワークフローは、推奨事項がほとんど生成されないことがあります。これは失敗ではなく1つの発見です。ワークフローファイルを編集すると分析が再トリガーされるため、次のワークフロー変更後に再度確認してください。
推奨事項の適用が失敗した、または変更が破棄された#
推奨事項は、分析時点で存在していたワークフローファイルに対して生成されます。それ以降にファイルが変更された場合(あなたの編集や、以前にマージされたLatchkeyのPR)、一部の推奨事項はきれいには適用できなくなります:
- Latchkeyは、まだ適合するものでPRを開き、手動での配置が必要な推奨事項を一覧表示します。PRは
latchkey/ブランチ上で「Latchkey insight: <what it does>」というタイトル(例:「Latchkey insight: pin GitHub Actions to commit SHAs」)で届き、成功バナーが直接そこへのリンクを提供します。insight-<detector>-<hex> - 選択したすべての推奨事項が破棄された場合、古いセットを再試行しないでください。ワークフローを編集すると新しい分析がトリガーされます。それが完了するのを待ち(Insightsページの処理中バナーが消えます)、新しいセットから適用してください。最適化インサイトを参照してください。
支払いが失敗し、アクセスがブロックされた#
Past Due ステータスは支払いの失敗を意味します: 支払い方法がStripeポータルで修正されるまで、ダッシュボードとAPIへのアクセスがブロックされ、ランナーの起動が停止します。Stripeポータルでは、支払い方法、請求書(PDF付き)、サブスクリプションの詳細が管理されます。代わりにサブスクリプションが Canceled の場合、アクセスはブロックされますが、再サブスクライブできるよう請求は引き続きアクセス可能です。いずれの場合もデータは保持されます。ステータスとその影響はサブスクリプションの管理に一覧されています。
スマートフォンでダッシュボードを使えない#
これは現時点では仕様です: ダッシュボードにはタブレット、ノートパソコン、またはデスクトップの画面が必要であり、幅が768 px未満の画面ではサインイン後に "A larger screen is needed" という見出しの通知が表示されます。メール、Slack、プッシュによる通知、および週次ダイジェストが、デスクを離れているときもあなたをカバーします。
個人アカウントにアプリをインストールした#
そのインストールは接続されており、そのアカウントでは、ダッシュボードから登録したリポジトリで Latchkey CI を実行できます。登録済みのリポジトリから latchkey-* ラベルを対象とする GitHub Actions のジョブは Latchkey のランナーでは実行されず、Latchkey はその理由を次のように伝えます: 「Latchkey on GH needs a GitHub organization. This personal account runs Latchkey CI: commit a workflow file under .latchkey/workflows/ and push.」ファイルについてはワークフローファイルで説明しています。個人アカウントのリポジトリでLatchkey on GH(GitHub Actionsで動くLatchkeyのマネージドランナー)を使うには、GitHub Appのインストールのとおり、リポジトリを組織に移動してください。
トライアルが終了し、すべてがブロックされた#
データは無傷です。ブロックはアクセスに対してであり、ストレージに対してではありません。ダッシュボードは「Your free trial has ended」画面に置き換えられ、APIアクセスは同じメッセージでブロックされ、マネージドランナーの起動はブロックされます(latchkey-* ラベルを対象とするジョブはエラーになるのではなくGitHubでキューのままになります)。アクティベーション画面(または到達できる場合は Billing ページ)からサブスクライブすると、ランナーの起動を含むアクセスが即座に復元されます。無料トライアルはおひとりにつき 1 回で、サブスクライブやプラン変更によって再開されることはありません。プランと無料トライアルを参照してください。
ジョブの failure_reason が意味するもの#
Latchkey CIのジョブを、あなたのコマンドが結果を決めるのではなくLatchkey自身が終了させた場合、そのジョブの failure_reason は以下のいずれかの値になります。各値はLatchkeyが記録するとおりの語なので、翻訳していません。
Latchkey自身の障害#
| 値 | 意味 | 再試行の可否 |
|---|---|---|
provisioning_deadline_exceeded | Latchkeyがこのジョブに時間内にランナーを割り当てなかったため、ジョブは開始されませんでした。 | はい |
provisioning_claim_abandoned | Latchkeyはこのジョブ用のランナーの準備を始めましたが、完了しませんでした。 | はい |
runner_lost_before_start | このジョブに割り当てられたランナーが、ジョブの開始前に消えました。 | はい |
runner_lost_heartbeat_dead | ジョブが終わる前に、ランナーが応答しなくなりました。 | はい |
runner_lost_timeout_exceeded | Latchkeyがランナーとの連絡を失い、待つのをやめました。エージェントの timeout_exceeded とは異なります。そちらは顧客自身のコマンドの実行時間が長すぎたことを意味します。 | はい |
runner_reaped_max_age_exceeded | ジョブがランナー上にある間に、Latchkeyがそのランナーを運用から外しました。 | はい |
runner_reaped_timeout_exceeded | ランナーが上限を超えて稼働した後、Latchkeyがそのランナーを運用から外しました。 | はい |
runner_reaped_heartbeat_dead | ランナーが応答しなくなった後、Latchkeyがそのランナーを運用から外しました。 | はい |
pending_deadline_exceeded | ジョブが開始されないまま、Latchkeyが許容する時間を超えて待機しました。 | はい |
no_capacity | Latchkeyにはこのジョブに使えるそのサイズのランナーがなく、確保の試行をやめました。 | はい。小さいサイズのほうが配置されやすくなります |
requeue_cap_exceeded | Latchkeyは試行回数の上限内に、このジョブをランナーに配置できませんでした。 | はい |
not_queued_at_final_attempt | Latchkeyが最後の配置を試みた時点で、ジョブはもう待機していませんでした。 | はい |
claim_contended_at_final_attempt | Latchkeyの2つのコンポーネントが同時にこのジョブを確保しようとし、どちらも完了しませんでした。 | はい |
unbound_pipeline | Latchkeyはこのジョブをパイプラインに結び付けられませんでした。すべてのジョブはパイプラインの識別情報を持つため、これはあなたのコマンドの問題ではなく当社側の不具合です。 | いいえ。再試行しても同じところで止まります。報告してください |
blocked: token_life_below_launch_floor | Latchkeyはジョブより長く有効な認証情報を発行できず、後で再試行するためのキュー内のジョブの位置も見つけられなかったため、ジョブを終了しました。 | はい |
blocked: concurrency_limit | このワークスペースは同時実行の上限に達しており、Latchkeyはジョブを待機させておくためのキュー内のジョブの位置を見つけられなかったため、ジョブを終了しました。 | はい。実行中のジョブが終わった後であれば |
forge_provider_unsupported | Latchkeyはこのコードホストにまだ対応していません。 | いいえ。当社側の未対応によるものです |
refused: runner_cannot_read_secrets | このジョブが割り当てられたランナーは、このジョブのシークレットを安全に扱うには古すぎるLatchkeyエージェントで動いていたため、Latchkeyはどのステップも実行する前にジョブを終了し、課金もしていません。 | はい |
refused: runner_cannot_prepare_services | Latchkeyはジョブの開始前に、このジョブが割り当てられた各ランナーを確認し、ランナーがジョブのサービスを実行できないたびに、ジョブを別のランナーに移しました。試行が残っていなかった時点で、どのステップも実行する前にジョブを終了し、課金もしていません。 | はい |
context_fetch_failed | Latchkeyがこのジョブ用に保持していたコンテキストを用意できなかったため、コマンドは実行されませんでした。この障害はLatchkey自身が確認したものです。同じ値をジョブが報告した場合はジョブ自身の言葉となり、表の下で説明します。 | はい、新しい実行でコンテキストが再度アップロードされます |
あなたによるキャンセル#
| 値 | 意味 | 再試行の可否 |
|---|---|---|
cancel_requested_before_running | このジョブが開始される前に、あなたがキャンセルしました。 | はい。もう一度送信すれば再試行できます |
cancelled_before_provisioning | Latchkeyがまだランナーを準備している間に、あなたがこのジョブをキャンセルしました。 | はい。もう一度送信すれば再試行できます |
接続と登録#
| 値 | 意味 | 解決方法 |
|---|---|---|
not_enrolled | このリポジトリはLatchkey CIに登録されていません。 | ダッシュボードから登録してください |
no_connection | Latchkeyには、このリポジトリのコードホストへの接続がありません。 | Settings の Code hosts から再接続してください |
connection_deleted | このリポジトリが使っていた接続は削除されました。 | Settings の Code hosts から再接続してください |
connection_suspended | このアカウントではLatchkeyアプリが一時停止されているため、Latchkeyはリポジトリを読み取れません。 | コードホストの設定で一時停止を解除してください |
connection_credential_unusable | この接続についてLatchkeyが保存している認証情報は、もう機能しません。 | コードホスト上でそのアカウントから Latchkey アプリをアンインストールし、Settings の Code hosts から再接続してください |
repo_grant_revoked | Latchkeyアプリには、このリポジトリへのアクセス権がもうありません。 | コードホストの設定でアクセスを再度許可してください |
tenant_mismatch | このリポジトリは別のLatchkeyワークスペースに接続されています。 | ワークスペースを確認し、正しいと思われる場合は報告してください |
forge_provider_mismatch | このリポジトリは、Latchkeyが保持している接続とは別のコードホストに属しています。 | リポジトリを正しいホストに再接続してください |
repository_not_identified | Latchkeyは、このジョブがどのリポジトリに属するかを判別できませんでした。 | リポジトリを登録し直してください |
repository_not_found | Latchkeyはコードホスト上でこのリポジトリを見つけられませんでした。 | リポジトリがまだ存在し、アクセスが引き続き許可されているか確認してください |
repository_identity_unusable | Latchkeyは、このリポジトリについてもう使えない識別情報を保持しています。 | リポジトリを登録し直してください |
請求と利用資格#
| 値 | 意味 | 解決方法 |
|---|---|---|
refused: no_subscription | このワークスペースにはプランがないため、Latchkeyはジョブを開始しませんでした。 | プランを選択してください。すでにプランがある場合はサポートに連絡してください |
blocked: no_subscription | refused: no_subscription と同じ原因で、オファー時ではなく起動時に記録されたものです。 | プランを選択してください。すでにプランがある場合はサポートに連絡してください |
refused: trial_expired | トライアルが終了したため、Latchkeyはジョブを開始しませんでした。 | プランを選択してください。トライアルがまだ有効な場合はサポートに連絡してください |
blocked: trial_expired | refused: trial_expired と同じ原因で、起動時に記録されたものです。 | プランを選択してください。トライアルがまだ有効な場合はサポートに連絡してください |
refused: subscription_inactive | サブスクリプションが有効ではないため、Latchkeyはジョブを開始しませんでした。 | 請求を再度有効にしてください。すでに有効な場合はサポートに連絡してください |
blocked: subscription_inactive | refused: subscription_inactive と同じ原因で、起動時に記録されたものです。 | 請求を再度有効にしてください。すでに有効な場合はサポートに連絡してください |
refused: eligibility_lapsed_at_offer | このジョブを送信してから開始するまでの間に、ワークスペースがジョブを実行できる資格を失いました。 | 請求を確認してください。正しいように見える場合はサポートに連絡してください |
blocked: spend_cap_reached | ワークスペースがオーナーまたは管理者の設定した支出上限に達したため、Latchkeyがジョブを拒否または停止しました。 | 上限を引き上げるか、リセットを待ってください |
stopped: spend_cap_reached | ワークスペースがオーナーまたは管理者の設定した支出上限に達したため、Latchkeyがジョブを拒否または停止しました。 | 上限を引き上げるか、リセットを待ってください |
stopped: free_allowance_reached | ワークスペースが含まれる分数をすべて使い切り、プランがないため、Latchkeyがジョブを停止しました。 | プランを選択するか、リセットを待ってください |
budget_reached | ジョブが開始時に設定された予算(ジョブの budget_usd、または latchkey run の --budget)に達したため、Latchkeyがジョブを停止しました。その予算を超えて請求されることはありません。 | 作業にさらに必要な場合は、より大きな予算で再度開始してください |
あなた自身の入力#
| 値 | 意味 | 再試行の可否 |
|---|---|---|
command_spawn_failed | あなたが設定した環境変数の値のうち1つにNULバイトが含まれているため、Latchkeyはあなたのコマンドを開始できませんでした。コマンドは一度も実行されていません。 | いいえ。値を変更するまではできません。解決方法: 名前が示された環境変数の値からNULバイトを取り除いてください。 |
blocked: secret_scope_refused | このジョブのステップが参照しているシークレットが、このリポジトリにもそのワークスペースにも存在しなくなっていました。実行がキューに入った後に削除されたため、Latchkeyはジョブを実行する前に終了し、課金もしていません。 | いいえ。シークレットが再び設定されるまではできません。解決方法: このリポジトリかそのワークスペースでシークレットを設定するか、ワークフローファイルからその参照を取り除いてください。 |
failure_reason には、取りうる値が決まっていない種類が2つあるため、表には列挙できません。1つ目は、ジョブ自身が報告した理由です。Latchkeyはそれをジョブ自身の言葉として表示し、Latchkeyチェックは赤になります。そのうちの1つである context_fetch_failed は、Latchkeyが保持していたコンテキストをジョブが取得できなかったことを意味します。Latchkeyがその障害を自らのものと確認できた場合(保持していたコンテキストが見つからない場合)、チェックはニュートラルになり、行とCLIにもその旨が表示されます。確認できない場合、チェックは赤のままで、ジョブ自身の言葉が表示されます。そのうちのもう1つである service <label> could not start は、ランナー自体が起動に失敗した場合(ホスト名の書き込み、コンテナエンジンが応答しないか起動を拒否した場合、またはエンジンクライアントを準備できなかった場合)はLatchkey側の障害で、ラベルがすでにランナー上のホスト名である場合、イメージを取得できなかった、停止した、または時間内に準備ができなかった場合はジョブ自身の失敗です。どちらであるかはジョブのログに書かれ、取得が拒否された場合はレジストリ自身のメッセージも記録されます。Latchkey側の障害の場合も、Latchkeyがその障害を自ら確認できるようになるまで、チェックは赤になります。Latchkeyはサービスを使うジョブの開始前にランナーを確認し、その確認でランナーが実行できないことが判明した場合(エンジンクライアントを準備できない、エンジンがネットワークの作成を拒否する、ホスト名を書き込む権限がない、またはジョブのためにコールドスタートしたランナーでエンジンが応答しない場合)、ジョブは代わりに別のランナーに移ります。そうして試行が尽きたジョブは、最初の表にある refused: runner_cannot_prepare_services で終了し、チェックは赤になりません。2つ目は、launch_failed: の後にエラー名が続くものです。これはLatchkeyがそのジョブのランナーを起動できなかったことを意味し、最初の表にあるものと同じくLatchkey側の障害で、再試行しても安全です。
まだ解決しませんか?#
FAQには手早い回答があります。それ以外については、サポートと Account and help メニューの Send feedback のどちらも直接チームに届きます。
ジョブが queued のまま止まっています。最初に確認すべきことは?
次の順に 6 点を確認してください。ランナーのラベル、リポジトリが監視対象かどうか、ランナー構成、請求状態、進行中のイメージビルド、同時実行の上限です。それぞれに明示的な兆候があるため、推測するよりリストを順に追う方が早く原因にたどり着けます。
ダッシュボードが空です。データはどこへ行きましたか?
ほとんどの場合、データが失われたのではなく、フィルターかバックフィルのタイミングが原因です。Reset filters はすべてのリポジトリとワークフローを再び選択し、Date range のウィンドウを直近 30 日に戻します。新しいワークスペースなら、直近 30 日分の取り込みがまだ進行中の可能性があります。
GitHub App を個人アカウントにインストールしてしまいました。どうすれば?
インストールは接続されており、そのアカウントで Latchkey CI を実行できます: ダッシュボードからリポジトリを登録してから、ワークフローファイルを .latchkey/workflows/ の下にコミットしてプッシュしてください。Latchkey on GH には GitHub の Organization が必要です。リポジトリを Organization に移す方法は GitHub App のインストール にあります。