GitHub:デプロイが成功するまでプルリクをマージできない
ルールセットやブランチの保護ルールは、ブランチをマージする前に、変更が特定の環境へ正しくデプロイされていることを求められます。GitHub は、既定のブランチへマージする前にステージング環境へデプロイする例を挙げています(GitHub の説明「ルールセットで使えるルール」・2026年10月27日に確認)。そのデプロイが成功するまで、このルールがマージを止めます。
Require deployments to succeed before merging environments: staging, ... REST rule type required_deployments parameters required_deployment_environments: ["staging"] deployment status error | failure | inactive | in_progress | queued | pending | success
ルールが求めること
- 設定する所:ルールセットか、ブランチの保護ルールです。保護ルールでは Require deployments to succeed before merging を選び、環境を選びます(GitHub の説明「ブランチの保護ルールの管理」)。
- REST API では:ルールセットの種類
required_deploymentsのルールで、required_deployment_environmentsが、ブランチをマージする前に正しくデプロイされていなければならない環境です(GitHub の説明「ルールの REST API」)。 - 環境:
production・staging・developmentのような、デプロイ先の総称です。環境の名前は大文字と小文字を区別しません。個人アカウントのリポジトリでは持ち主が、組織のリポジトリでは admin 権限がある人が設定します。GitHub Free では、環境を使えるのは公開リポジトリだけです(GitHub の説明「デプロイの環境の管理」)。 - デプロイの状態:デプロイには
error・failure・inactive・in_progress・queued・pending・successの状態が付き、GitHub は一番新しい状態をそのデプロイの今の状態として出します(GitHub の説明「デプロイの状態の REST API」)。
デプロイが成功していない理由
- レビュアー待ち:環境を使うジョブは、ランナーに送られる前にその環境の保護ルールを通る必要があります。必須のレビュアー(Required reviewers)があるなら、最大6人・チームのうち1人(リポジトリの読み取り権限以上が要る)が承認します。ワークフローの実行で Review deployments を押し、環境を選んで Approve and deploy を押します。Reject を押すとワークフローは失敗します。Prevent self-review があると、自分が始めた実行は承認できません(GitHub の説明「デプロイのレビュー」)。
- 待ち時間:Wait timer があると、ジョブは始まってから設定の分数(1〜43,200 分=30日)待ちます(GitHub の説明「デプロイと環境」)。
- デプロイできないブランチ:Deployment branches で、その環境へデプロイできるブランチとタグが絞られていることがあります。
- 独自の保護ルール:GitHub App が作った保護ルールもデプロイを止められます。
- デプロイが失敗した:状態が
failureかerrorです。デプロイのページから各デプロイのワークフローの実行のログへ行けます。
直す所
- デプロイを見る:リポジトリのデプロイのページに、デプロイの URL、各デプロイのもとのプルリクとブランチ、状態が出て、コミットとワークフローの実行のログへ行けます。リポジトリの外のフォークからのデプロイには、もとのプルリクとブランチへのリンクが出ません(GitHub の説明「デプロイの履歴を見る」)。
- 承認してもらう:環境の必須のレビュアーの1人に、ワークフローの実行でデプロイのレビューを頼みます。
- 保護ルールを迂回する:既定では管理者ができます。ジョブが Pending のあいだに、ワークフローの実行の Deployment protection rules の右の Start all waiting jobs を押し、環境を選んでコメントを書きます。環境は、すべてのデプロイで迂回を許さないようにも設定できます。
- ルールを変える:ルールセットやブランチの保護ルールを管理する人が、指定する環境を変えるか、ルールを外します。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。対象のブランチのルールセットがデプロイの成功を求めているとき、止まっているプルリクのマージの確認欄に、その環境を挙げます(ブランチの保護の同じ設定は API で返らないので挙げません)。デプロイやデプロイのレビューはせず、それは GitHub でします。受信箱・差分・会話は無料、承認・コメント・解決・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English