APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

GitLab Deployment approvalsで安全なデプロイを実現する

こんにちは、クラウド事業部 CI/CDサービスメニューチームの山路です。

今回はGitLabのDeployment approvalsを紹介します。Deployment approvalsは指定した環境へのデプロイ実行に特定ユーザーからの承認を要求し、意図しないタイミングのデプロイを防ぎます。

docs.gitlab.com

背景

GitLabのDeployment approvalsは、GItLab Environmentに対する保護を実現する機能です。GitLab Environmentは簡単に言うとコードがデプロイされる場所をGitLab上で表すリソースで、デプロイ履歴の記録やアクセス用URLの提供、GitLab agent for Kubernetesと連携したDashboardの提供といった機能を実現します。

※参考:

Deployment approvalsは、GitLab CI/CDからEnvironmentへのデプロイを実施する際に、特定のRoleやユーザーからの承認を義務付けることで、予期せぬタイミングやメンバーによって本番環境へのデプロイが実行されるのを防ぐことができます。具体的には以下2つの行動に対する承認を設定し、承認者として割り当てられたメンバーが手動デプロイを承認・実行できます。

  • デプロイを許可する: CI/CD Jobからデプロイを実行することを承認します。承認前はCI/CDパイプライン画面からデプロイを選択することができません。
  • デプロイを実行する: パイプライン画面から実際にデプロイを実行できます。

なおDeployment approvalsはPremiumプランから利用可能です。

検証

ここからDeployment approvalsを検証します。

今回は事前に手動で検証用の production Environmentを用意しておきます。

Deployment approvalsの設定は、GitLabの設定画面 ( 設定CI/CD保護された環境 ) から行います。

保護された環境 画面を開き、まずは保護対象のEnvironment (今回は production ) を設定します。

Environmentを選択後、 デプロイ許可 承認者 という項目が表示されます。これら項目は「実際にデプロイを実行することを許可する」「デプロイの実行自体を許可する」メンバーをそれぞれ設定します。

※なお検証時は 承認者 に対してRoleのみを付与した場合は正常に動作せず、メンバーを特定する必要がありました。何か設定を誤っている可能性もありますが、記載しておきます。

設定後は以下のように、設定されたルールの種別の数が表示されます。

Deployment approvalsを設定したので実際にデプロイを実施するための .gitlab-ci.yml ファイルを配置します。なお今回は実際にどこかの環境を操作することはせず、テキストの表示のみ行いました。

※使用した .gitlab-ci.yml はこちら

stages:
  - deploy

production:
  stage: deploy
  script:
    - 'echo "Deploying to production again & again"'
  environment:
    name: production
    action: start

.gitlab-ci.yml を配置後にパイプラインの状況を見ると、以下のようにパイプラインの実行がブロックされています。またパイプラインの ボタンを選択しようとしても、この時点では選択できません。

production Jobを選択すると以下のような画面が表示され、このJobが承認待ちであることが分かります。

デプロイの詳細ページを表示する を選択すると以下のような画面に遷移し、承認者の一覧と デプロイの承認 拒否 ボタンが表示されます。デプロイの内容に問題がなければ自身の名前を選択して デプロイの承認 を選択します。

承認後は以下のような画面となり、デプロイが可能となります。デプロイの実行は本画面の デプロイ 、またはパイプライン画面に戻り ボタンから行います。

※なお今回はMerge requestの作成者とデプロイの承認者が同一人物です。このような場合はCI/CD設定画面に戻り パイプライントリガーによるデプロイの承認を許可します を選択しておく必要があります。

デプロイを承認後にパイプライン画面に戻ると、先ほどとは異なり production Jobにも ボタンが表示されています。またカーソルを合わせるとデプロイが実行できることを確認できます。

しばらく待つとJobが完了すること、Environment画面にもデプロイ履歴が表示されていることを確認できます。

さいごに

弊社はGitLabオープンパートナー認定を受けております。 また以下のようにCI/CDの導入を支援するサービスも行っているので、何かご相談したいことがあればお気軽にご連絡ください。

www.ap-com.co.jp