背景
- 组员忘记写周报了,怎么办,每周五手动艾特所有人么...
- 提交了代码,需要提mr,私聊或者直接扯嗓子喊人:我刚给你提了个mr,帮我合下
- 每次发布需要盯着打包、部署平台进度? ..
解决方式
【自动化!自动化!自动化!】 上面的问题解决方式分为两种:定时任务和某个特定事件触发
企业微信/钉钉支持添加群机器人,机器人会对应一个webhook地址,通过调用该地址,群机器人会发送消息内容(文本/markdown格式),支持 @群里所有人或群成员;
- 【定时任务】服务端跑定时任务,调用群机器人webhook地址
- 触发特定事件(需要该事件支持自定义webhook即接口地址),后端接口调用机器人webhook地址
例如:git push支持自定义webhook,当代码有push,则会调用填写的webhook
👇简单的画了个流程图,比较好理解一点
graph LR
代码push -->|携带参数回调填写的接口| 后端接口将收到的参数组装整合成新参数--->|调用| 企业微信群机器人webhook地址
node层跑定时任务 -->|调用| 企业微信群机器人webhook地址
1)企业微信群机器人webhook地址参数格式👇
2)代码push回调的参数示例 👇,如图包含项目和本次提交的信息,我们可以做数据整合,调用企业微信群机器人的webhook地址
{
"object_kind": "push",
"before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
"after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"ref": "refs/heads/master",
"checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"user_id": 4,
"user_name": "John Smith",
"user_username": "jsmith",
"user_email": "john@example.com",
"user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
"project_id": 15,
"project":{
"id": 15,
"name":"Diaspora",
"description":"",
"web_url":"http://example.com/mike/diaspora",
"avatar_url":null,
"git_ssh_url":"git@example.com:mike/diaspora.git",
"git_http_url":"http://example.com/mike/diaspora.git",
"namespace":"Mike",
"visibility_level":0,
"path_with_namespace":"mike/diaspora",
"default_branch":"master",
"homepage":"http://example.com/mike/diaspora",
"url":"git@example.com:mike/diaspora.git",
"ssh_url":"git@example.com:mike/diaspora.git",
"http_url":"http://example.com/mike/diaspora.git"
},
"repository":{
"name": "Diaspora",
"url": "git@example.com:mike/diaspora.git",
"description": "",
"homepage": "http://example.com/mike/diaspora",
"git_http_url":"http://example.com/mike/diaspora.git",
"git_ssh_url":"git@example.com:mike/diaspora.git",
"visibility_level":0
},
"commits": [
{
"id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
"message": "Update Catalan translation to e38cb41.",
"timestamp": "2011-12-12T14:27:31+02:00",
"url": "http://example.com/mike/diaspora/commit/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
"author": {
"name": "Jordi Mallach",
"email": "jordi@softcatala.org"
},
"added": ["CHANGELOG"],
"modified": ["app/controller/application.rb"],
"removed": []
},
{
"id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"message": "fixed readme",
"timestamp": "2012-01-03T23:36:29+02:00",
"url": "http://example.com/mike/diaspora/commit/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"author": {
"name": "GitLab dev user",
"email": "gitlabdev@dv6700.(none)"
},
"added": ["CHANGELOG"],
"modified": ["app/controller/application.rb"],
"removed": []
}
],
"total_commits_count": 4
}
行动
- node层作为后端服务;这里推荐下egg,支持定时任务
- 定时任务调用企业微信的群机器人webhook地址
- 项目代码的push会触发push event, 回调webhook地址(预设的node服务的接口A地址);接口A处理push事件传递的参数, 调用企业微信的群机器人webhook地址
- 打包成功/失败后,预设脚本(curl 接口B地址), 接口B调用企业微信的群机器人地址
Q & A
Q- 你可能想说:企业微信不是没周五有周报汇报提示么,多此一举?
A- 汇报提示是统一提提示的,每个群可能有定制性,可能也有要求写日报
Q- mr和打包、部署平台打包完后不是可以设置邮件提醒么,多此一举?
A- 我周围的小伙伴对邮件的依赖没有那么强,用的比较多的是企业微信/钉钉,我这边的想法也是让这种辅助性的工具越少越好,这样开发人员的精力会更集中
结果
-
每周五18:40定时推送写周报的消息到群,并艾特所有
-
代码push会发送消息到群里并艾特提交人,并显示提交信息等
-
代码打包部署后,会发消息到群,并艾特所有人
总结
- 想着如何【偷懒】,减少重复劳动性的工作
- 尽可能工作自动化,给卷一卷的工作增加点乐趣