Skip to main content

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

サードパーティ システムを使ってデプロイを自動保護するには、GitHub Apps を使います。

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

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

前提条件

メモ

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

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

GitHub Apps

を使ったカスタム デプロイ保護規則の作成

  1. GitHub App を作成します。 詳しくは、「GitHub App の登録」をご覧ください。 次のように GitHub App を構成します。

    1. 必要に応じて [ユーザーの識別と認可] の下にある [コールバック URL] テキスト フィールドにコールバック URL を入力します。 詳しくは、「ユーザー承認コールバック URL について」をご覧ください。
    2. [アクセス許可] で [リポジトリのアクセス許可] を選びます。
    3. [アクション] の右にあるドロップ ダウン メニューをクリックし、 [アクセス: 読み取り専用] を選びます。
      新しい GitHub App の [Repository permissions] セクションのスクリーンショット。 [Actions] のアクセス許可は [Read-only] と表示され、オレンジ色の枠線で囲まれています。
    4. [デプロイ] の右側にあるドロップ ダウン メニューをクリックし、 [アクセス: 読み取りと書き込み] を選びます。
      新しい GitHub App の [Repository permissions] セクションのスクリーンショット。 [Deployments] のアクセス許可は [Read and write] と表示され、オレンジ色の枠線で囲まれています。
    5. [イベントへのサブスクライブ] で [デプロイ保護規則] を選びます。
      新しい GitHub App の [Subscribe to events] セクションのスクリーンショット。 [Deployment protection rule] のチェックボックスが、オレンジ色の枠線で囲まれています。
  2. カスタム デプロイ保護規則をリポジトリにインストールし、使用できるようにします。 詳しくは、「カスタム デプロイ保護規則の構成」をご覧ください。

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

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

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

  2. JSON Web Token を使って GitHub App として認証を行います。 詳しくは、「GitHub Appとしての認証」をご覧ください。

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

    curl --request POST \
    --url "http(s)://HOSTNAME/api/v3/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 上のデプロイを確認します。 詳しくは、「デプロイメントのレビュー」をご覧ください。