デプロイ承認者

  • GitLab 14.7 でdeployment_approvals というフラグで導入されました。デフォルトでは無効です。
  • GitLab 14.8で機能フラグが削除されました。

特定の保護された環境(例えば本番環境)にデプロイする前に、追加の承認者を要求することが有用な場合があります。このデプロイ前の承認要件は、各デプロイの前に行わなければならないテスト、セキュリティ、またはコンプライアンスプロセスに対応するのに便利です。

保護された環境で 1 つ以上の承認者が必要な場合、その環境へのデプロイはすべてブロックされ、Allowed to Deploy リストから必要な承認を待ってから実行されます。

note
予定されている機能については、エピックを参照してください。

前提条件

プロジェクトのデプロイ承認者の設定

プロジェクトのデプロイ承認を設定します:

  1. デプロイジョブを作成します。
  2. 保護環境の承認者を要求します。

デプロイ ジョブの作成

目的のプロジェクトの.gitlab-ci.yml ファイルにデプロイジョブを作成します。ジョブは手動である必要はありません(when: manual)。

使用例:

stages:
  - deploy

production:
  stage: deploy
  script:
    - 'echo "Deploying to ${CI_ENVIRONMENT_NAME}"'
  environment:
    name: ${CI_JOB_NAME}

保護環境に対する承認者の必要性

承認者を設定するには、2 つの方法があります:

  • 統一承認者設定…デプロイの実行者と承認者を定義できます。これは、組織内で実行者と承認者の職務が分離されていない場合に便利です。
  • 複数の承認ルール…誰がデプロイを実行または承認できるかを定義できます。これは、組織内で実行者と承認者の職務が分離されている場合に便利です。
note
複数の承認ルールは、統一承認設定よりも柔軟なオプションです。したがって、両方の設定が共存してはならず、複数の承認ルールが発生した場合は、統一承認設定よりも優先されます。

統一承認設定 (非推奨)

  • GitLab 15.11でUI設定が削除されました。
caution
この機能はGitLab 16.1で非推奨となり、17.0では削除される予定です。代わりに複数の承認ルールを使用してください。この変更はブレークチェンジです。

保護された環境で承認者を設定するには:

  • REST API を使用して、required_approval_count フィールドを 1 以上に設定します。

この設定後、この環境にデプロイするすべてのジョブは自動的にブロック状態になり、実行前に承認者を待ちます。必要な承認者数がデプロイを許可されるユーザー数より少ないことを確認してください。

使用例:

curl --header 'Content-Type: application/json' --request POST \
     --data '{"name": "production", "deploy_access_levels": [{"group_id": 9899826}], "required_approval_count": 1}' \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/projects/22034114/protected_environments"
note
環境を保護、更新、保護解除するには、少なくともメンテナーのロールが必要です。

複数の承認者ルール

  • REST API を使う
    • deploy_access_levels は、デプロイ ジョブを実行できるエンティティを表します。
    • approval_rules は、どのエンティティがデプロイジョブを承認できるかを表します。
  • UI を使用します。
    • Allowed to deployは、デプロイ ジョブを実行できるエンティティを設定します。
    • 承認者] は、デプロイ ジョブを承認できるエンティティを設定します。

この設定を行うと、この環境にデプロイするすべてのジョブは自動的にブロック状態になり、実行前に承認を待ちます。必要な承認者数が、デプロイを許可されるユーザー数より少ないことを確認します。デプロイ ジョブが承認されたら、手動で実行する必要があります。

REST API を使用する設定は次のようになります:

curl --header 'Content-Type: application/json' --request POST \
     --data '{"name": "production", "deploy_access_levels": [{"group_id": 138}], "approval_rules": [{"group_id": 134}, {"group_id": 135, "required_approvals": 2}]}' \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/groups/128/protected_environments"

この設定では

  • オペレータグループ (group_id: 138) には、組織 (group_id: 128) 内のproduction 環境へのデプロイジョブを実行する権限があります。
  • QA テスター グループ (group_id: 134) とセキュリティ グループ (group_id: 135) には、組織内のproduction 環境 (group_id: 128) へのデプロイ ジョブを承認する権限があります。
  • セキュリティグループからの 2 つの承認者と QA テスターグループからの 1 つの承認者が集まらなければ、 オペレーターグループはデプロイジョブを実行できません。
note
環境を保護、更新、保護解除するには、少なくともメンテナーのロールが必要です。

複数の承認ルールへのマイグレーション

保護された環境を統一承認ルールから複数承認ルールにマイグレーションできます。統一承認ルールでは、環境にデプロイできるすべてのエンティティがデプロイ ジョブを承認できます。複数の承認ルールにマイグレーションするには、環境へのデプロイが許可されているエンティティごとに新しい承認ルールを作成します。

UI を使用してマイグレーションするには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. Settings > CI/CDを選択します。
  3. 保護された環境を展開します。
  4. 環境] リストから環境を選択します。
  5. 環境へのデプロイが許可されている各エンティティについて説明します:
    1. 承認者の追加] を選択します。
    2. モーダルウィンドウで、デプロイジョブの承認者を選択します。
    3. 必要な承認者数を入力します。
    4. Save を選択します。

各デプロイには、各エンティティから指定された数の承認者が必要です。

たとえば、以下のProduction 環境では、合計 5 つの承認者が必要であり、グループVery Important Group とユーザーAdministrator からのデプロイのみが許可されます:

unified approval rules

マイグレーションを行うには、Very Important GroupAdministrator のルールを作成します。必要な承認者数を維持するために、Very Important Group の必要な承認者数を4人に設定し、Administrator 1 Administrator人に設定します。Administrator 新しいルールでは AdministratorProductionのすべてのデプロイ ジョブを承認するAdministrator 必要が Administratorあります。

multiple approval rules

自己承認の許可

デフォルトでは、デプロイパイプラインをトリガーしたユーザーはデプロイジョブを承認することもできません。デプロイジョブの自己承認を許可するには:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. Settings > CI/CDを選択します。
  3. 保護された環境を展開します。
  4. 承認]オプションから、[パイプライン トリガラがデプロイを承認できるようにする]チェックボックスを選択します。

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

GitLab 14.9 で導入されました

GitLab UIまたはAPIを使うと、以下のことができます:

  • デプロイを承認して、デプロイを進めることができます。
  • デプロイを拒否すると、デプロイができません。
note
GitLab管理者はすべてのデプロイを承認または拒否することができます。

UI を使ったデプロイの承認者・却下者

前提条件:

  • 保護環境へのデプロイの権限。

UI を使用して保護環境へのデプロイを承認または拒否するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. オペレーション > 環境を選択します。
  3. 環境名を選択します。
  4. デプロイの行で[承認オプション]({サムアップ})を選択します。デプロイを承認または拒否する前に、付与された承認数と残りの承認数、承認者ま たは拒否者を確認できます。
  5. オプション。配置を承認または拒否する理由を説明するコメントを追加します。
  6. 承認者]または[拒否者]を選択します。

API を使用したデプロイの承認者または拒否者

前提条件:

  • 保護環境へのデプロイの権限。

API を使用して保護された環境へのデプロイを承認または拒否するには、必要な属性を渡します。詳細は、「ブロックされたデプロイを承認または拒否する」を参照してください。

使用例:

curl --data "status=approved&comment=Looks good to me" \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deployments/1/approval"

デプロイの承認者の詳細を表示します。

前提条件:

  • 保護環境へのデプロイの権限。

保護された環境へのデプロイは、必要なすべての承認者が許可された後にのみ続行できます。

デプロイの承認者の詳細を表示するには、次の手順に従います:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. オペレーション > 環境を選択します。
  3. 環境名を選択します。
  4. デプロイの行で、[承認者] オプションを選択します({サムアップ})。

承認ステータスの詳細が表示されます:

  • 承認者
  • 承認者数および必要承認者数
  • 承認者ユーザー数
  • 承認者または却下者の履歴

ブロックされたデプロイの確認方法

UIの使い方

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. オペレーション > 環境を選択します。
  3. デプロイ先の環境を選択します。
  4. blocked のラベルを探します。

API の使用

デプロイを確認するには、デプロイ APIを使用します。

  • status フィールドは、デプロイがブロックされているかどうかを示します。
  • 統合承認者設定が構成されている場合:
    • pending_approval_count フィールドは、デプロイを実行するための承認者の残り数を示します。
    • approvals フィールドにはデプロイの承認者が含まれます。
  • 複数の承認ルールが設定されている場合:
    • approval_summary フィールドには、ルールごとの現在の承認ステータスが表示されます。

デプロイの保護を目的とした他の GitLab 機能の詳細については、安全なデプロイをご覧ください。