Gitlab Mattermost简单高效的团队交流工具

前言

由于公司有一些外包的开发测试同事在公司被限制了外网,导致必须使用飞秋和RTX进行交流,由于网段问题飞秋只有开发人员使用,测试人员主要使用RTX,导致了日常交流十分麻烦,正好Gitlab自带了Mattermost可以解决这个问题

启用Mattermost

修改Gitlab配置

Mattermost在Gitlab中默认是不开启的,需要修改配置文件启用,由于我把配置挂载到了物理机的/srv/gitlab/config目录下,所以直接修改目录下的gitlab.rb文件即可

1
vim /srv/gitlab/gitlab.rb

找到gitlab_rails['mattermost_host']这段配置,取消注释并输入mattermost的域名,这里只支持域名而不支持纯ip,如果你只有内网ip的话,可以试试xip.io这个域名,例如你的内网ip是10.0.1.101,可以设置域名为mattermost.10.0.1.101.xip.io,如果你有可以用的DNS服务器,这个域名会返回一个10.0.1.101的DNS结果,这样内网的域名问题就解决了
配置好了上面的选项,mattermost就可以正常启动了,这里默认使用了mattermost自带的postgresql数据库,如果需要切换独立的mysql的话,可以找到mattermost['sql_driver_name']mattermost['sql_data_source']等相关配置进行修改。

启动Mattermost服务

这里采用最粗暴的方式:重启Gitlab容器

1
docker restart gitlab

或者是温柔一点的方法,在容器内重启

1
docker exec -it gitlab gitlab-ctl reconfigure

Mattermost配置

重启完成以后,在浏览器输入mattermost配置好的域名,进入以后需要登录,如果你需要使用Gitlab账户进行登录的话,点击下方的Gitlab图标,跳转到Gitlab进行认证,如果你是独立安装的Mattermost,就不会出现这个链接,需要自行配置。

本地化

登录以后,默认第一位用户是超级管理员,打开System Console,找到设置中的本地化页面,可以设置默认的客户端语言为中文简体,建议默认的服务器语言为英语,设置中文会出现一些奇怪的bug

关闭非Gitlab认证

打开系统设置中的验证-电子邮件,关闭里面的三个设置选项,这样的话你的mattermost服务只能服务于Gitlab里的用户,视情况打开这个选项

邮箱相关设置

我这里没有邮箱通知的需求,所以在设置-通知-电子邮件中,我关掉了所有电子邮箱相关的设置,并且取消了邮箱设置未启用的通知,如果你有需求,可以在这里设置

Gitlab通知和二次开发

Gitlab项目通知

Gitlab的pipeline每次触发后,在网页上等待执行结果实在是太浪费时间,何不执行完成以后自动在Mattermost里直接推送结果

打开传入webhooks

在设置-集成-自定义集成中,设置启用传出的Webhooks,这里应该是一个翻译错误

在群组中添加一个webhooks

这里会创建一个机器人用于发送消息,我建议专门创建一个独立的用户作为机器人,如果用管理员的账户的话,机器人发送私聊信息时,会与管理员的私聊混淆
创建机器人,并且给机器人用户授权为管理员后,使用这个机器人账户登录,在群组页面的选项中,打开集成-引入webhooks,点击添加引入钩子,填写所需要的信息后,就得到了一个专用的字符串token

在Gitlab项目中设置webhooks

使用项目管理员登录Gitlab,在需要开启mattermost通知的项目里打开设置-集成页面,在下方的Project services里找到Mattermost notifications并打开,选择你要通知的事件,填写刚注册好的webhooks地址,点击下方的Test settings and save changes,你的mattermost频道里应该就会收到一些机器人发来的测试信息了
如果你需要全部项目的信息,可以在Gitlab管理员的管理中心中打开服务模板,进行跟上面继续是完全相同的设置

webhooks二次开发

有时我们需要对一些自定义的通知定制,这里就需要我们自己进行代码编写,具体可以参考mattermost的官方文档,我这里主要的应用是在监控服务器状态,日志状态,发生错误以后触发脚本告警。

总结

以上主要介绍了开启Gitlab-Mattermost的流程和webhooks的简易应用,这个软件使用体验远超过了之前使用的RTX和飞秋,如果非要说有什么缺点的话,就是缺了一个截图的功能,不过安装一个小软件就可以解决这个痛点,也不算什么太大的问题