GitLabのWebHook機能で、GitLabから送られてくるデータをまとめてみました。
※ 現時点で不明な部分は判明次第更新予定です。
環境
- GitLabのバージョン: XX
- GitLab付随のサンプルプログラム( print_http_body.rb )を利用
- print_http_body.rbはGitLabからPOST送信で送られてきたデータをそのまま出力するプログラムです
- サンプルプログラムを実行するサーバのOS: RHEL6.6
- サンプルプログラムを実行するサーバのRubyのバージョン: 1.8.7
GitLabから送られてくるデータフォーマット
データ形式
イベント発生時にGitLabから送られてくるデータは JSON 形式です。
イベントの種類
GitLabでは、以下の4つのイベントが発生した際にGitLabからデータを送るように指定できます。
- Push events
- Tag push events
- Issues events
- Merge Request events
GitLabから送られてくるイベントの種類は、送られてきたJSON形式のデータの object_kind
のキーにより判別できます。
object_kindの値 | データの内容 |
---|---|
push | WebHookを設定したリポジトリに対し、pushした時に発行されるイベント |
tag_push | WebHookを設定したリポジトリンに対し、tagをpushした時に発行されるイベント |
issue | WebHookを設定したリポジトリのIssueに変化が起きた時に発行されるイベント |
merge_request | WebHookを設定したリポジトリに関連する、Merge Requestの操作を行った時に発行されるイベント |
pushイベント時に送られてくるデータ形式
pushイベント時にGitLabから送られてくるデータ形式を示します。
リポジトリを削除した場合にもpushイベントが発生しますが、キー after
の値が0の羅列であるかで判定可能です。
★は調査中の項目です。
キー | 子キー | 孫キー | 値 |
---|---|---|---|
after | push後の最新のコミットのハッシュ値(リポジトリ削除の場合は0の羅列) | ||
before | push前の最新のコミットのハッシュ値 | ||
checkout_sha | ★ | ||
commits | コミット一覧(配列) | ||
author | コミット者の情報 | ||
コミット者のE-mailアドレス | |||
name | コミット者の名前 | ||
id | コミットのハッシュ | ||
message | コミットメッセージ | ||
timestamp | コミット日時 | ||
url | コミットをGitLab上で確認するためのURL | ||
object_kind | イベントの種類( push ) |
||
project_id | プロジェクトのID | ||
ref | コミット先のブランチ | ||
repository | push先のリポジトリ情報 | ||
description | ★ | ||
git_http_url | リポジトリへHTTPアクセス時に必要となるURI | ||
git_ssh_url | リポジトリへSSHアクセス時に必要となるURI | ||
homepage | リポジトリのホームページ | ||
name | リポジトリ名 | ||
url | ★ git_ssh_url と同様 | ||
visibility_level | ★ | ||
total_commits_count | pushに含まれるコミット数 | ||
user_email | pushを行った人のE-mailアドレス | ||
user_id | pushを行った人のユーザID | ||
user_name | pushを行った人の名前 |
tag_pushイベント時に送られてくるデータ形式
tag_pushイベント時にGitLabから送られてくるデータ形式を示します。
★は調査中の項目です。
キー | 子キー | 内容 |
---|---|---|
after | push後の最新のコミットのハッシュ値 | |
before | push前の最新のコミットのハッシュ値(本タグに対する前のコミットはないため確実に0の羅列になる) | |
checkout_sha | push前の最新コミットのハッシュ値(本タグではなく、リポジトリ全体の最新コミットハッシュ値) | |
commits | コミット一覧(常に空の配列) | |
object_kind | イベントの種類( tag_push ) |
|
project_id | プロジェクトのID | |
ref | コミット先のブランチ(pushしたタグ名を取得可能) | |
repository | push先のリポジトリ情報 | |
description | ★ | |
git_http_url | リポジトリへHTTPアクセス時に必要となるURI | |
git_ssh_url | リポジトリへSSHアクセス時に必要となるURI | |
homepage | リポジトリのホームページ | |
name | リポジトリ名 | |
url | ★ git_ssh_url と同様 | |
visibility_level | ★ | |
total_commits_count | pushに含まれるコミット数(常に0) | |
user_email | pushを行った人のE-mailアドレス | |
user_id | pushを行った人のユーザID | |
user_name | pushを行った人の名前 |
★ 名前等からの推測のため、情報提供求
issueイベント時に送られてくるデータ形式
issueイベント時にGitLabから送られてくるデータ形式を示します。
既存のIssueに対してコメントを行った場合は、イベントは発生しません。
Issueに対してopen
/close
/reopen
を発行すると、update
イベントも同時に発行されます。
★は調査中の項目です。
キー | 子キー | 内容 |
---|---|---|
object_attributes | Issueイベントに関する様々な情報 | |
action | Issueに対する操作 - open : Issueを発行 - update : Issueを更新 - close : Issueをクローズ - reopen : Issueを再オープン |
|
assignee_id | Assign toでIssueの担当者として割り当てられたユーザID | |
author_id | Issue発行者のユーザID | |
branch_name | Issueを発行したブランチ | |
created_at | Issue発行日時 | |
description | Issueの説明文 | |
id | IssueのID | |
iid | GitLab上で割り当てられたIssue番号(#で始まる番号) | |
milestone_id | 関連付けしたMilestoneのID(割り当てないとnull) | |
position | ★ | |
project_id | プロジェクトのID | |
state | イベント発行後のIssueの状態 - opened : IssueがOpen状態 - closed : IssueがClosed状態 - reopened : 1度closeしたが、再度open状態に変化 |
|
title | Issueのタイトル | |
updated_at | イベント発行日時 | |
url | 本IssueのGitLab上でのURL | |
object_kind | イベントの種類(issue) | |
user | イベント発行者の情報 | |
avater_url | イベント発行者のアバター画像のURL | |
name | イベント発行者の名前 | |
username | イベント発行者のニックネーム |
merge_requestイベントに送られてくるデータ形式
merge_requestイベント時にGitLabから送られてくるデータ形式を示します。
既存のMerge Requestに対するコメントを行った場合、イベントは発生しません。
Merge Request上でソースを修正してcommitすると、pushイベントが発行されます。
Merge Requestに対して、 open
/ close
/ merge
を発行すると、merge_requestの update
イベントも同時に発行されます。
★は調査中の項目です。
キー | 子キー | 孫キー | 曾孫キー | 内容 |
---|---|---|---|---|
object_attributes | Merge Requestイベントに関する様々な情報 | |||
action | Merge Requestに対する操作 - open : Merge Requestを発行 - closed : Merge Requestをクローズ - reopen : クローズしたMerge Requestを再オープン |
|||
assignee_id | Assign toでMerge Requestの担当者として割り当てられたユーザID | |||
author_id | Merge Request発行者のユーザID | |||
created_at | Merge Request発行日時 | |||
description | Merge Requestの説明文 | |||
id | Merge RequestのID | |||
iid | GitLab上で割り当てられたMerge Request番号(#で始まる番号) | |||
last_commit | Merge Request内の最終コミットの情報 | |||
author | コミット者の情報 | |||
コミット者のE-mailアドレス | ||||
name | コミット者の名前 | |||
id | コミットのハッシュ値 | |||
message | コミットのメッセージ | |||
timestamp | コミット日時 | |||
url | コミットをGitLab上で確認するためのURL | |||
locked_at | ★ | |||
merge_status | ★Merge Requestの状態 - unchecked : - can_be_merged : |
|||
milestone_id | 関連付けしたMilestoneのID(割り当てないとnull) | |||
position | ★ | |||
source | Merge Request元のリポジトリ情報 | |||
http_url | リポジトリへHTTPアクセス時に必要となるURI | |||
name | リポジトリ名 | |||
namespace | リポジトリが所属するグループ名 | |||
ssh_url | リポジトリへSSHアクセス時に必要となるURI | |||
visibility_level | ★ | |||
source_branch | Merge Request元のブランチ名 | |||
source_project_id | Merge Request元のプロジェクトID | |||
state | イベント発行後のMerge Requestの状態 - opened : Merge RequestがOpen状態 - closed : Merge RequestがClose状態 - reopened : 1度closeしたが、再度open状態に変化 - merged : Mergeが完了した状態 |
|||
target | Merge Request先のリポジトリ情報 | |||
http_url | リポジトリへHTTPアクセス時に必要となるURI | |||
name | リポジトリ名 | |||
namespace | リポジトリが所属するグループ名 | |||
ssh_url | リポジトリへSSHアクセス時に必要となるURI | |||
visibility_level | ★ | |||
target_branch | Merge Request先のブランチ名 | |||
target_project_id | Merge Request先のプロジェクトID | |||
title | Merge Requestのタイトル | |||
updated_at | イベント発行日時 | |||
url | 本Merge RequestのGitLab上でのURL | |||
object_kind | イベントの種類(merge_request) | |||
user | イベント発行者の情報 | |||
avater_url | イベント発行者のアバター画像のURL | |||
name | イベント発行者の名前 | |||
username | イベント発行者のニックネーム |