【入門編】GitLab System Hooksを使ったサーバーサイドの強力な自動化:リポジトリ作成をトリガーにした権限自動割り当て – バージョン管理・CI/CD活用バイブル

GitLabを単なる「コード置き場」だと思っていませんか? もしそうなら、あなたはまだGitLabの本当の力を見過ごしています。

今日は、GitLab管理者の隠し武器、「System Hooks」の世界へご案内しましょう。これは、プロジェクト単位のWebhookとは次元が違います。GitLabインスタンス全体の「すべての動き」を監視し、サーバーサイドで直接命令を下す、いわばGitLabの司令塔です。

今回は、「新しいリポジトリが作られた瞬間、自動的にルールを適用し、チームを招待する」という、大規模開発の現場で必須となる自動化を実装してみましょう。

—

1. WebhookとSystem Hooksの決定的な違い

初心者の方が最初につまずくのがここです。

  • Project Webhook: 特定のプロジェクト内でのプッシュやマージを検知します。「このリポジトリが更新されたらSlackに通知する」といった用途ですね。
  • System Hooks: インスタンス全体を統括します。ユーザーの作成、グループの作成、そしてリポジトリの新規作成といった「イベント」をキャッチします。

なぜこれが最強なのか?
開発者が勝手に作ったプロジェクトを野放しにすると、アクセス権の漏洩や、保護ブランチ設定忘れによる事故が多発します。System Hooksを使えば、「開発者が空のリポジトリを作った瞬間、管理者権限が強制的にガードを固める」という自動化が可能です。

—

2. 事前準備:司令塔を動かす場所

System Hooksは「GitLabから送られてくるJSON通知」を受け取るためのWebサーバーが必要です。今回はシンプルにPython (Flask) で受信機を作ります。

サーバーの役割:
1. GitLabからの通信を受け取る。
2. そのイベントが「プロジェクト作成 (project_create)」か確認。
3. GitLab APIを叩いて、必要な設定を流し込む。

—

3. 実装:プロジェクト作成と同時に「鉄壁の守り」を敷く

以下のスクリプトは、新しいプロジェクトが作成されたら、「特定のグループを自動招待」し、「mainブランチを保護」する最小限のハックです。

from flask import Flask, request
import requests

app = Flask(__name__)

GitLabのアクセストークンとURL
GITLAB_URL = “https://your-gitlab-instance.com”
PRIVATE_TOKEN = “your_admin_token”

@app.route(‘/webhook’, methods=[‘POST’])
def handle_hook():
data = request.json

# プロジェクト作成イベントのみに反応
if data.get(‘event_name’) == ‘project_create’:
project_id = data[‘project_id’]

# 1. 特定のグループ(例: QAチーム)をメンバーとして追加
add_member_url = f”{GITLAB_URL}/api/v4/projects/{project_id}/share”
requests.post(add_member_url, headers={‘PRIVATE-TOKEN’: PRIVATE_TOKEN}, json={
‘group_id’: 123, ‘group_access’: 30 # 30 = Developer権限
})

# 2. mainブランチを保護(強制適用)
protect_url = f”{GITLAB_URL}/api/v4/projects/{project_id}/protected_branches”
requests.post(protect_url, headers={‘PRIVATE-TOKEN’: PRIVATE_TOKEN}, json={
‘name’: ‘main’, ‘push_access_level’: 40, ‘merge_access_level’: 40
})

return “Applied security policies!”, 200

return “Ignored”, 200

if __name__ == ‘__main__’:
app.run(port=5000)

—

4. 設定の仕上げ:GitLabへの登録

コードができたら、GitLabに「このサーバーを監視してくれ」と伝えます。

1. 管理者設定へ: GitLabの「Admin Area」を開きます。
2. System Hooksを選択: 左メニューの「System Hooks」をクリック。
3. 登録:

  • URLに `http://your-server-ip:5000/webhook` を入力。
  • 「Project events」にチェックを入れる。
  • 「Add system hook」を押す。

これだけで、今後あなたのGitLabで誰かがプロジェクトを作るたびに、このスクリプトが影の立役者として走り出し、セキュリティ設定を完璧に整えてくれます。

—

最後に:なぜこれをやるのか?

「自動化」は単なる効率化ではありません。「人間が忘れること」をシステムが肩代わりすることで、チームの安全性と速度を最大化する戦略です。

GitLabのSystem Hooksを使えば、組織が拡大しても管理コストは一定に保てます。これをマスターすれば、あなたはもう「設定作業に追われる管理者」ではなく、「インフラをコードで統治するアーキテクト」になれるはずです。

さあ、まずはローカルでこのフックを立ち上げるところから始めてみてください。あなたのGitLab運用が、今日から劇的に変わりますよ!

タイトルとURLをコピーしました