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 | イベント発行者のニックネーム |