Skip to main content

カスタム デプロイ保護規則の作成

GitHub Appsを使用して、サード パーティ製システムでのデプロイの保護を自動化します。

この機能を使用できるユーザーについて

カスタム デプロイ保護ルールは、すべてのプランのパブリック リポジトリで使用できます。 プライベートまたは内部リポジトリ内のカスタム デプロイ保護ルールにアクセスする場合は、GitHub Enterprise を使う必要があります。 詳細については、「GitHubのプラン」を参照してください。

前提条件

メモ

カスタム配置保護ルールは、現在 パブリック プレビュー 段階であり、変更される可能性があります。

デプロイ保護規則の一般的な情報については、「GitHub Actionsを使用したデプロイ」をご覧ください。

を使用してカスタム展開保護規則を作成する GitHub Apps

  1. GitHub Appを作成します。 詳しくは、「GitHub アプリの登録」をご覧ください。 次のように GitHub App を構成します。
    1. 必要に応じて [ユーザーの識別と認可] の下にある [コールバック URL] テキスト フィールドにコールバック URL を入力します。 詳しくは、「ユーザー承認コールバック URL について」をご覧ください。
    2. [アクセス許可] で [リポジトリのアクセス許可] を選びます。
    3. [アクション] の右にあるドロップ ダウン メニューをクリックし、 [アクセス: 読み取り専用] を選びます。

新しいGitHub アプリの [リポジトリのアクセス許可] セクションのスクリーンショット。 [Actions] のアクセス許可は [Read-only] と表示され、オレンジ色の枠線で囲まれています。

  1. [デプロイ] の右側にあるドロップ ダウン メニューをクリックし、 [アクセス: 読み取りと書き込み] を選びます。

新しいGitHub アプリの [リポジトリのアクセス許可] セクションのスクリーンショット。 [Deployments] のアクセス許可は [Read and write] と表示され、オレンジ色の枠線で囲まれています。

  1. [イベントへのサブスクライブ] で [デプロイ保護規則] を選びます。

新しいGitHub アプリの [Subscribe to events] セクションのスクリーンショット。 [Deployment protection rule] のチェックボックスが、オレンジ色の枠線で囲まれています。

  1. カスタム デプロイ保護規則をリポジトリにインストールし、使用できるようにします。 詳しくは、「カスタム デプロイ保護規則の構成」をご覧ください。

デプロイの承認または拒否

カスタム展開保護規則が有効になっている環境を参照するジョブにワークフローが到達すると、GitHubは、POSTペイロードを含む構成した URL にdeployment_protection_rule要求を送信します。 deployment_protection_rule ペイロードに基づいてデプロイを承認または拒否する REST API 要求を自動的に送信するように、デプロイ保護規則を記述することができます。 次のように REST API 要求を構成します。

ワークフロー ジョブの環境が deployment: falseに設定されている場合、カスタム展開保護規則には互換性がありません。 詳しくは、「GitHub Actionsを使用したデプロイ」をご覧ください。

  1. 受信 POST 要求を検証します。 詳しくは、「Webhook 配信を検証する」をご覧ください。

  2. JSON Web トークンを使用して、 GitHub Appとして認証します。 詳しくは、「GitHub アプリとしての認証」をご覧ください。

  3. deployment_protection_rule Webhook ペイロードのインストール ID を使って、インストール トークンを生成します。 詳しくは、「GitHub アプリでの認証について」をご覧ください。

    curl --request POST \
    --url "https://api.github.com/app/installations/INSTALLATION_ID/ACCESS_TOKENS" \
    --header "Accept: application/vnd.github+json" \
    --header "Authorization: Bearer {jwt}" \
    --header "Content-Type: application/json" \
    --data \
    '{ \
       "repository_ids": [321], \
       "permissions": { \
          "deployments": "write" \
       } \
    }'
    
  4. 必要に応じて、 GitHubに他のアクションを実行せずに状態レポートを追加するには、 POST 要求を /repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_ruleに送信します。 要求本文内では state を省略します。 詳しくは、「ワークフロー実行の REST API エンドポイント」をご覧ください。 同じデプロイに関する状態レポートは、最大 10 回まで投稿できます。 状態レポートは Markdown 形式をサポートしており、最大 1,024 文字まで使用できます。

  5. 要求を承認または拒否するには、POST 要求を /repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rule に送信します。 要求本文で、state プロパティを approved または rejected に設定します。 詳しくは、「ワークフロー実行の REST API エンドポイント」をご覧ください。

  6. 必要に応じて、GET 要求を /repos/OWNER/REPOSITORY_ID/actions/runs/RUN_ID/approvals に送信して、ワークフロー実行の承認状態を要求します。 詳しくは、「ワークフロー実行の REST API エンドポイント」をご覧ください。

  7. 必要に応じて、 GitHubでのデプロイを確認します。 詳しくは、「デプロイメントのレビュー」をご覧ください。

GitHub Marketplace でのカスタム デプロイ保護ルールの公開

開発者が適切な保護規則を検出し、GitHub App リポジトリ全体にインストールできるように、GitHub MarketplaceをGitHubに発行できます。 また、ニーズに合わせて既存のカスタム デプロイ保護規則を参照することもできます。 詳細については、「GitHub Marketplace for apps について」および「GitHub Marketplace にアプリを一覧表示する」を参照してください。