Gitlab 飞书机器人通知配置
前置需要:
- 需要拥有仓库的访问和管理权限(至少是
Maintainer维护者角色的权限)- 需要有一个飞书群的机器人
访问 Gitlab 仓库 Webhooks 配置页面
做左侧侧边栏展开Settings(如果没有该选项,则说明当前账号权限不足, 需要先获取权限)
创建一个新的 webhook
填写机器人 webhook 地址
webhook 地址在飞书群上创建机器人后,直接复制 webhook 地址:
勾选需要触发通知的内容
填写自定义消息模板
PS: 飞书有自己的消息模板要求,所以需要进行单独配置
以飞书卡片交互消息通知类型为例(可直接拷贝套用):
gitlab 填充字段内容格式: (与获取 json 内容类似) 如 获取合并请求源分支;
| (合并请求通知有哪些字段可以参考下方提供的示例内容,也可以直接访问 gitlab 文档具体查看: [Webhook events | GitLab Docs](https://docs.gitlab.com/18.8/user/project/integrations/webhook_events/) ) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
{
"msg_type": "interactive",
"card": {
"schema": "2.0",
"config": { "update_multi": true },
"header": {
"title": { "tag": "plain_text", "content": "🔀 Merge Request ! | 状态:" },
"subtitle": { "tag": "plain_text", "content": " · " },
"template": "blue",
"padding": "12px 12px 12px 12px"
},
"body": {
"direction": "vertical",
"padding": "12px 12px 12px 12px",
"elements": [
{
"tag": "markdown",
"content": "**[]()**\n`` → ``",
"text_size": "heading"
},
{
"tag": "markdown",
"content": "",
"text_size": "normal"
},
{ "tag": "hr"},
{
"tag": "column_set",
"flex_mode": "none",
"horizontal_spacing": "16px",
"columns": [
{
"tag": "column",
"width": "weighted",
"weight": 1,
"elements": [
{ "tag": "markdown", "content": "**发起人**\n@" }
]
},
{
"tag": "column",
"width": "weighted",
"weight": 1,
"elements": [
{ "tag": "markdown", "content": "**合并状态**\n" }
]
}
]
},
{ "tag": "hr" },
{
"tag": "column_set",
"flex_mode": "none",
"horizontal_spacing": "8px",
"columns": [
{
"tag": "column",
"width": "auto",
"elements": [
{
"tag": "button",
"text": { "tag": "plain_text", "content": "查看 MR" },
"type": "primary",
"size": "medium",
"behaviors": [{ "type": "open_url", "default_url": "" }]
}
]
},
{
"tag": "column",
"width": "auto",
"elements": [
{
"tag": "button",
"text": { "tag": "plain_text", "content": "查看项目" },
"type": "default",
"size": "medium",
"behaviors": [{ "type": "open_url", "default_url": "" }]
}
]
}
]
}
]
}
}
}
如果需要额外添加 Gitlab Merge Event 的消息,可参考以下的字段内容(注意: gitlab 不支持渲染数组内容,即无法正常将
assignees或reviewers渲染成一个数组字符串,更无法读取数组里面的元素,类似assignees[0]或assignees.0.name):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 { "object_kind": "merge_request", "event_type": "merge_request", "user": { "id": 1, "name": "Administrator", "username": "root", "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon", "email": "admin@example.com" }, "project": { "id": 1, "name":"Gitlab Test", "description":"Aut reprehenderit ut est.", "web_url":"http://example.com/gitlabhq/gitlab-test", "avatar_url":null, "git_ssh_url":"git@example.com:gitlabhq/gitlab-test.git", "git_http_url":"http://example.com/gitlabhq/gitlab-test.git", "namespace":"GitlabHQ", "visibility_level":20, "path_with_namespace":"gitlabhq/gitlab-test", "default_branch":"master", "ci_config_path":"", "homepage":"http://example.com/gitlabhq/gitlab-test", "url":"http://example.com/gitlabhq/gitlab-test.git", "ssh_url":"git@example.com:gitlabhq/gitlab-test.git", "http_url":"http://example.com/gitlabhq/gitlab-test.git" }, "repository": { "name": "Gitlab Test", "url": "http://example.com/gitlabhq/gitlab-test.git", "description": "Aut reprehenderit ut est.", "homepage": "http://example.com/gitlabhq/gitlab-test" }, "object_attributes": { "id": 99, "iid": 1, "target_branch": "master", "source_branch": "ms-viewport", "source_project_id": 14, "author_id": 51, "assignee_ids": [6], "assignee_id": 6, "reviewer_ids": [6], "title": "MS-Viewport", "created_at": "2013-12-03T17:23:34Z", "updated_at": "2013-12-03T17:23:34Z", "last_edited_at": "2013-12-03T17:23:34Z", "last_edited_by_id": 1, "milestone_id": null, "state_id": 1, "state": "opened", "blocking_discussions_resolved": true, "work_in_progress": false, "draft": false, "first_contribution": true, "merge_status": "unchecked", "target_project_id": 14, "description": "", "prepared_at": "2013-12-03T19:23:34Z", "total_time_spent": 1800, "time_change": 30, "human_total_time_spent": "30m", "human_time_change": "30s", "human_time_estimate": "30m", "url": "http://example.com/diaspora/merge_requests/1", "source": { "name":"Awesome Project", "description":"Aut reprehenderit ut est.", "web_url":"http://example.com/awesome_space/awesome_project", "avatar_url":null, "git_ssh_url":"git@example.com:awesome_space/awesome_project.git", "git_http_url":"http://example.com/awesome_space/awesome_project.git", "namespace":"Awesome Space", "visibility_level":20, "path_with_namespace":"awesome_space/awesome_project", "default_branch":"master", "homepage":"http://example.com/awesome_space/awesome_project", "url":"http://example.com/awesome_space/awesome_project.git", "ssh_url":"git@example.com:awesome_space/awesome_project.git", "http_url":"http://example.com/awesome_space/awesome_project.git" }, "target": { "name":"Awesome Project", "description":"Aut reprehenderit ut est.", "web_url":"http://example.com/awesome_space/awesome_project", "avatar_url":null, "git_ssh_url":"git@example.com:awesome_space/awesome_project.git", "git_http_url":"http://example.com/awesome_space/awesome_project.git", "namespace":"Awesome Space", "visibility_level":20, "path_with_namespace":"awesome_space/awesome_project", "default_branch":"master", "homepage":"http://example.com/awesome_space/awesome_project", "url":"http://example.com/awesome_space/awesome_project.git", "ssh_url":"git@example.com:awesome_space/awesome_project.git", "http_url":"http://example.com/awesome_space/awesome_project.git" }, "last_commit": { "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "message": "fixed readme", "title": "Update file README.md", "timestamp": "2012-01-03T23:36:29+02:00", "url": "http://example.com/awesome_space/awesome_project/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "author": { "name": "GitLab dev user", "email": "gitlabdev@dv6700.(none)" } }, "labels": [{ "id": 206, "title": "API", "color": "#ffffff", "project_id": 14, "created_at": "2013-12-03T17:15:43Z", "updated_at": "2013-12-03T17:15:43Z", "template": false, "description": "API related issues", "type": "ProjectLabel", "group_id": 41 }], "action": "open", "detailed_merge_status": "mergeable" }, "labels": [{ "id": 206, "title": "API", "color": "#ffffff", "project_id": 14, "created_at": "2013-12-03T17:15:43Z", "updated_at": "2013-12-03T17:15:43Z", "template": false, "description": "API related issues", "type": "ProjectLabel", "group_id": 41 }], "changes": { "updated_by_id": { "previous": null, "current": 1 }, "draft": { "previous": true, "current": false }, "updated_at": { "previous": "2017-09-15 16:50:55 UTC", "current":"2017-09-15 16:52:00 UTC" }, "labels": { "previous": [{ "id": 206, "title": "API", "color": "#ffffff", "project_id": 14, "created_at": "2013-12-03T17:15:43Z", "updated_at": "2013-12-03T17:15:43Z", "template": false, "description": "API related issues", "type": "ProjectLabel", "group_id": 41 }], "current": [{ "id": 205, "title": "Platform", "color": "#123123", "project_id": 14, "created_at": "2013-12-03T17:15:43Z", "updated_at": "2013-12-03T17:15:43Z", "template": false, "description": "Platform related issues", "type": "ProjectLabel", "group_id": 41 }] }, "last_edited_at": { "previous": null, "current": "2023-03-15 00:00:10 UTC" }, "last_edited_by_id": { "previous": null, "current": 3278533 } }, "assignees": [ { "id": 6, "name": "User1", "username": "user1", "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon" } ], "reviewers": [ { "id": 6, "name": "User1", "username": "user1", "state": "unreviewed", "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon" } ] }
测试通知
配置通知过滤
在飞书群机器人上设置 自定义关键词, 这里配置只允许 open 的合并请求通知
本文由作者按照 CC BY 4.0 进行授权







