GitHub ActionsのDeployment jobがPendingのまま進まないときの確認

Deployment jobのPendingを環境承認・timer・保護ルール・concurrency・runner待ちに分け、対象runと次の担当を確認します。

AIものさし編集部

GitHub ActionsのDeployment jobがPendingのままなら、待っている理由をrun画面で確認します。environmentの承認待ち、wait timer、外部の保護ルール、concurrency、runner待ちは別の状態です。Pendingという語だけで、承認ボタンを押せば直るとは判断しません。

この記事はGitHub.comのenvironmentを参照するjobの診断です。実際の承認・デプロイ・保護設定変更・workflow再実行は実施していません。表示名や利用可能な保護機能は、契約とrepositoryの公開範囲、GitHub Enterprise Serverのバージョンなどで確認してください。

対象run・commit・environmentを固定する

run URL、job、event、refとcommit SHA、environment名、待機開始時刻を記録します。同じworkflowでも、別のrunや別environmentの承認通知を見ている場合があります。画面の待機理由とYAMLのenvironment指定を対応させます。

表は横にスクロールできます

表示・観察最初に見る場所混同しないこと
Review deploymentsの通知対象environmentのreviewPRのcode review
timerによる待機environmentのwait timerrunnerの処理遅延
protection ruleの結果待ち対象ruleと外部systemjob内のAPI認証
concurrency group待ち同じgroupの先行run/jobenvironment承認
runner待ちruns-on、runnerの利用状態reviewerの不在

jobのstepがすでに始まって失敗している場合は、承認待ち診断だけでは解決しません。失敗stepのlogへ切り替えます。上流jobの結果やneedsが原因なら、先にそちらを確認します。

required reviewerの対象と自己承認制限を見る

GitHubのreview手順(新しいタブで開く)に従い、reviewが必要なrunではReview deploymentsから対象environmentを確認できます。承認は実際のdeploymentを進める操作なので、調査のために押さず、内容を確認するreviewerへ渡します。

environmentの公式reference(新しいタブで開く)では、required reviewersのうち一人の承認で進める仕組みを説明しています。全員の返答が必要だと推測せず、設定されたuser/teamと現在のreview状態を確認します。prevent self-reviewが有効なら、runを開始した本人はreviewerに含まれていても自己承認できません。

承認済みなのに動かない場合は、承認対象のenvironmentが同じか、他の保護条件が残っていないかを確認します。承認が通って初めてenvironment secretsへアクセスできる条件もあるため、承認前の待機をsecretの値の修正で直そうとしないようにします。

timer・branch制限・外部ruleを別々に読む

wait timerは、job開始前に設定時間を待たせる保護機能です。設定値と起点、経過時間を確認し、不要だと思って診断中に0へ変更しません。必要な時間が過ぎていないなら、その待機は期待した動作の可能性があります。

branch/tagの制限では、workflowの実際のrefが対象の規則に合うかを見ます。PRの表示branch名だけで判断せず、実行eventに応じたrefを確認します。外部のdeployment protection ruleなら、そのruleの判定、連携先の結果、対象deploymentとの対応を管理者へ確認します。外部ruleは現行資料でpreviewとして扱われるため、すべての環境にある前提にしません。

表は横にスクロールできます

未充足の条件残す証拠次の担当
reviewer待ちenvironment・run・対象SHA指定reviewer
timer設定時間と経過運用担当
ref制約event・ref・対象rulerepository管理者
外部rulerule名・判定状態・時刻連携system管理者
確認権限がない見えた状態と未確認項目environment管理者

concurrencyとrunner待ちは別の経路で調べる

environmentの保護条件が満たされていても、同じconcurrency groupの先行処理やrunnerの割当を待っているなら、reviewerを増やしても解消しません。関連runの状態、評価されたgroup、対象jobのrunner条件を読みます。先行jobを無条件にcancelすると、途中まで行った外部更新が残る場合があります。

同じdeploymentを再実行してPendingを増やす前に、元runがまだ有効かを確認します。再実行で新しい入力やSHAへ変わるなら、以前の承認対象と同じだと扱いません。必要なreviewの判断を省かず、今回進めるrunを一つに絞ります。

承認判断に必要な情報をそろえる

reviewerには、対象commit、変更内容、検証結果、environment、想定する外部変更、戻し方を渡します。承認後も残る保護条件がある場合は、その状態も添えます。Start all waiting jobs等のbypassは通常の復旧手順にしません。保護ルールを外す行為には、組織の別の運用判断が必要です。

処理が進んだ後は、jobが開始したこととdeployment完了を分けて確認します。必要なstep、対象バージョン、サービス側の結果、失敗や部分成功がないかを記録します。Pending解消だけで公開先が正常になったとは判断しないようにします。

調査完了の記録は「どの条件が待たせていたか」「誰がどの根拠で進めたか」「どのrun・SHAがどこまで反映されたか」です。まだ待っている場合も、確認できた条件と次の担当が分かれば、原因不明の再実行を繰り返さずに引き継げます。