本文主要讲解使用Mattermost GitLab集成,实现GitLab项目事件通知与项目协作。
ChatOps
实施ChatOps是一种现代工作方式,它将人员,工具和讨论结合在一起,以提高生产力并帮助企业更快地发展。在ChatOps上运行的组织将自动监视和系统解析与人工监督和分析相结合,以最大程度地提高正常运行时间和效率。
ChatOps奖励组织提高效率,自动化和创新的能力,更高的可靠性,更快的事件响应时间以及数千小时的生产率节省。
NoOps
NoOps通常被认为是DevOps演进的下一阶段,当团队为操作,监视和恢复实施高度自动化的系统时,就会发生NoOps。在这里,当发生故障或一个机器人识别出错误时,另一机器人或自动化流程将执行恢复过程。
消息传递使组织能够更接近NoOps,从积极监视机器和工作流的人员转变为让机器人监视它们,并由人们根据需要监督机器人。这使运营人员和开发人员可以节省时间并提高生产率。
Mattermost
Mattermost是为开发团队推动创新而构建的开源消息传递平台。支持私有云部署在不牺牲隐私的情况下提供了现代通信的优势。Mattermost为企业提供了自治能力和可扩展性,使他们能够在满足需求的同时提高生产力IT和安全团队的要求。
Mattermost可轻松与流行的DevOps工具集成,例如Jira,Jenkins,GitLab,Trac,Redmine和Bitbucket。免费提供数十种开源集成,包括交互式bot应用程序(例如Hubot和whatmost-bot)以及其他通信工具。
Mattermost支持DevOps工作流程,许多DevOps工作流程都依赖实时协作。团队在关键时刻使用消息传递来提高效率—设置基础架构,合并代码分支或解决紧急错误。Mattermost统一了人员,工具,系统数据和自动化,以帮助您的组织发挥最佳性能。
Mattermost驱动DevOps生命周期
消息传递是DevOps团队合作的核心。这是工作流融合,进行关键交互并制定决策的地方。Mattermost通过实现与团队现有的DevOps工具和系统的集成,使您的工作流协作更加强大。
Plan计划:最重要的是有关功能,决策,技术等等的团队对话的记录系统。每个人都保持最新状态,并就项目状态和后续步骤保持一致。
Code代码:开发人员使用Mattermost进行协作和支持,使他们能够轻松地提出问题,解决问题,讨论技术方法并查看代码。
Build构建:平台集成使构建过程变得简单而透明。开发人员在Mattermost渠道中手动触发构建,然后团队会收到有关其成功或失败的通知。
Test测试:DevOps团队将他们最喜欢的CI和错误跟踪工具与Mattermost集成在一起,从而创建了一个强大的测试中心。该平台会自动触发测试并发布有关新错误的警报。
Release发布:发布构建后,DevOps团队将依靠Mattermost中的通知来告知他们发布已成功,因此他们可以加快功能和修补程序的交付。
Deploy部署:将代码投入生产后,DevOps团队会通过Mattermost进一步接收通知和数据。他们可以轻松跟踪哪些服务器接收到该代码并查看任何相关统计信息。
Monitor监控:DevOps监视工具可跟踪应用程序的运行状况和生产性能。使数据在Mattermost上可见可以帮助团队获得见解并制定决策。
通过上述的简介,相信大家已经对Mattermost有了简单的了解,接下来我们来配置Mattermost与Jenkins集成实现。
Mattermost安装
Mattermost Server支持Ubuntu、CentOS、Windows、Docker、Kubernetes部署,本次我们采用CentOS系统进行部署。
Mattermost Client提供了全终端支持。
参考文档:https://docs.mattermost.com/install/install-rhel-7.html
软件下载链接:https://mattermost.com/download-b/
安装数据库
数据库的类型可以是PG也可以是MySQL,本次安装使用MySQL57。
代码语言:javascript复制## 下载源
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum localinstall mysql57-community-release-el7-9.noarch.rpm
## 安装mysql
yum install mysql-community-server
systemctl start mysqld.service
systemctl enable mysqld
## 连接数据库
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password42!';
mysql> create user 'mmuser'@'%' identified by 'mmuser-password';
mysql> create database mattermost;
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
安装MattermostServer
代码语言:javascript复制wget https://releases.mattermost.com/X.X.X/mattermost-X.X.X-linux-amd64.tar.gz
tar -xvzf *.gz
mv mattermost /opt
mkdir /opt/mattermost/data
## 添加系统用户
useradd --system --user-group mattermost
chown -R mattermost:mattermost /opt/mattermost
chmod -R g w /opt/mattermost
## 编辑数据库配置
vim /opt/mattermost/config/config.json
### 配置站点url
1 {
2 "ServiceSettings": {
3 "SiteURL": "http://mattermost.idevops.site",
### 配置数据库
136 "SqlSettings": {
137 "DriverName": "mysql",
138 "DataSource": "dbuser:dbpasswd@tcp(localhost:3306)/dbname?char set=utf8mb4,utf8u0026readTimeout=30su0026writeTimeout=30s",
## 进行测试
cd /opt/mattermost
sudo -u mattermost ./bin/mattermost ## 出现 Server is listening on :8065 表示成功
## 添加系统服务
vim /etc/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=syslog.target network.target mysqld.service ## 如果是pg数据库这里改成postgresql-9.4.service
[Service]
Type=notify
WorkingDirectory=/opt/mattermost
User=mattermost
ExecStart=/opt/mattermost/bin/mattermost
PIDFile=/var/spool/mattermost/pid/master.pid
TimeoutStartSec=3600
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
chmod 664 /etc/systemd/system/mattermost.service
systemctl daemon-reload
systemctl enable mattermost
systemctl start mattermost
curl http://localhost:8065
配置nginx代理
代码语言:javascript复制upstream backend {
server xxxxxxxx:8065;
keepalive 32;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
server {
listen 80;
server_name mattermost.xxxxx.site;
location ~ /api/v[0-9] /(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://backend;
}
location / {
client_max_body_size 50M;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://backend;
}
}
此时已经安装完成了,可以通过浏览器打开创建管理员用户了。
GitLab项目事件通知
Mattermost Notifications Service 允许GitLab项目将事件(例如issue created)作为通知发送到现有的Mattermost团队。这需要在Mattermost和GitLab中进行配置。
创建WebHook
GitLab 配置
进入项目设置-> 集成 -> Mattermost services 。选中Active,在每个事件复选框的下方,都有一个输入字段,用于输入您要发送该事件消息的Mattermost频道。
最后,填写您最重要的详细信息:
- WebHook : 在Mattermost上设置的传入Webhook URL
- Username: 可选的用户名,可以在发送给Mattermost的信息中使用。
- Notify only broken pipelines: 流水线失败后进行通知。
验证测试
我们可以测试在GitLab中创建一个提交请求,消息能够正常推送到团队中则成功。
通过命令与GitLab交互
Mattermost命令为用户提供了一个额外的界面,可以在聊天环境中执行GitLab常见操作。例如,创建问题。
GitLab 启用服务
进入项目设置-> 集成 -> Mattermost slash commands。 这里面的提供的信息适用于下个步骤在slash 中配置的。这里只需要在参考一下信息完成slash配置后,填写token。
在Mattermost中启用斜杠命令
参考上个步骤中的GitLab信息填写,最后保存会生成一个token。这个token用于在上个步骤中使用。
开始交互
在Mattermost中输入/gitlab指令,会提示您点击一个链接进行验证。
点击链接后,完成认证。
创建一个issues进行测试。
代码语言:javascript复制/gitlab issue create devopstest
testtesttest
ChatOps是一种以对话为中心的协作式工作方式,Mattermost ChatOps将不同的工具和工作流程整合在一起,以提供共享的控制台,以简化协作,缩短反馈循环并自动执行重复的手动任务。