【無料ユーザーも使えます!】GitLabのマニュアルジョブに「確認ダイアログ」をつける方法 (GitLab 17.1〜)
はじめに
GitLabの無料プラン(Free Tier)を使っていると、「これは有料プランの機能だろうな」と最初から諦めてしまう機能、意外と多くないですか?
でも実は、GitLab 17.1(2024年6月20日リリース)で追加された「Require confirmation for manual jobs(マニュアルジョブの確認要求)」という機能は、Tierが Free / Premium / Ultimate となっており、GitLab.comでも自前でホストしているGitLab Self-Managedでも、無料プランのユーザーがそのまま使えます。
CI/CDパイプラインで「本番環境へのデプロイ」のような重要な操作を手動実行(manual job)にしている人は多いと思いますが、「ボタンをポチッと押したら即実行される」のは意外と怖いものです。この記事では、その「ポチッ」の前に確認ダイアログを挟める manual_confirmation というキーワードを、無料ユーザー目線でわかりやすく紹介します。
対象読者
- GitLab CI/CDで手動実行のジョブ(
when: manual)を使っている人 - 本番デプロイなど、うっかり実行が怖い処理を運用している人
- 「これ有料機能じゃないの?」と思って使ってなかった人
そもそも「マニュアルジョブ」とは
GitLab CI/CDでは、パイプラインの中のジョブに when: manual を指定することで、自動実行ではなく「ユーザーが手動でボタンを押すまで実行を待つ」ジョブを作れます。代表的な使い方が本番環境へのデプロイです。
deploy_production:
stage: deploy
script:
- make deploy
when: manual
environment: production
このジョブは、GitLabのUI上に再生ボタン(Playアイコン)として表示され、押した瞬間に実行が始まります。
ここで問題になるのが、**「間違って押してしまった」**というヒューマンエラーです。パイプライン画面を見ていて、隣のジョブを押すつもりが本番デプロイのボタンを押してしまった、なんてことは誰にでも起こり得ます。
解決策:manual_confirmation キーワード
GitLab 17.1から追加された manual_confirmation を when: manual と組み合わせるだけで、実行前に確認メッセージのダイアログを表示できるようになりました。
delete_job:
stage: post-deployment
script:
- make delete
when: manual
manual_confirmation: 'この環境を本当に削除してもよいですか?'
これだけです。ボタンを押すと、指定した文言の確認ダイアログがポップアップし、「OK」を選ぶまでジョブは実行されません。特別な設定変更や管理者権限も不要で、.gitlab-ci.yml に1行追加するだけで使えます。
本番デプロイでの実践例
先ほどの本番デプロイの例に組み込むと、こうなります。
deploy_production:
stage: deploy
script:
- make deploy
when: manual
manual_confirmation: '本番環境へのデプロイを実行します。よろしいですか?'
environment: production
チームメンバーが「うっかりクリック」してしまう事故を、コード側の設定だけで大きく減らせます。
ちょっとした裏話ですが、この機能はGitLabのコミュニティコントリビューター「Phawin」さんによって実装され、GitLab 17.1のリリースノートでも感謝のコメントが寄せられています。OSSらしいエピソードですね。
環境の停止(stop)ジョブにも対応
GitLab 18.3以降では、環境を止めるジョブ(environment: action: stop)に対しても manual_confirmation が使えるようになりました(※このstopジョブ対応がどのTierまで含まれるかは、本記事執筆時点で筆者が参照した情報には明記がなかったため、実際にお使いの環境で試す際はご自身のプランでの動作をご確認ください)。誤って本番環境を停止してしまう事故の防止にも役立ちます。
stop_production:
stage: cleanup
script:
- echo "本番環境を停止します"
environment:
name: production
action: stop
when: manual
manual_confirmation: "本番環境を停止します。本当に実行してよいですか?"
注意点
-
when: manualが定義されていないジョブにmanual_confirmationだけを書いても効果はありません。必ずセットで使いましょう。 -
manual_confirmationの値は単純な文字列です。Markdownのような装飾記法は使えないので、シンプルで分かりやすい一文にするのがおすすめです。 - 確認メッセージはただの文字列なので、チームの運用ルールに合わせて「なぜ確認が必要か」を一言添えておくと、より事故防止に効果的です。
まとめ
GitLabには、実は無料プランのままでも十分に「事故防止」に役立つ機能がいくつも用意されています。今回紹介した manual_confirmation(GitLab 17.1〜)は、まさにその代表例です。
- 対象Tier:Free, Premium, Ultimate(つまり無料でOK)
- 対象オファリング:GitLab.com, GitLab Self-Managed
- 導入バージョン:GitLab 17.1(環境停止ジョブへの対応はGitLab 18.3〜)
- 必要な作業:
.gitlab-ci.ymlに1行追加するだけ
「無料プランだから機能が少ない」と思い込んで損をしている人は意外と多いはずです。ぜひこの機会に、自分たちのパイプラインにも manual_confirmation を追加して、もっとGitLabを使いこなしてみてください。小さな設定ひとつで、大きな事故を未然に防げるかもしれません。
参考
- GitLab公式ドキュメント: CI/CD YAML構文リファレンス(
manual_confirmationキーワード) - GitLab 17.1 リリースノー(https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)
