本篇文章主要讲解 Mattermost + Jenkins实现消息传递和CI / CD管道之间的协作。
实施ChatOps是一种现代工作方式,它将人员,工具和讨论结合在一起,以提高生产力并帮助企业更快地发展。在ChatOps上运行的组织将自动监视和系统解析与人工监督和分析相结合,以最大程度地提高正常运行时间和效率。
ChatOps奖励组织提高效率,自动化和创新的能力,更高的可靠性,更快的事件响应时间以及数千小时的生产率节省。
NoOps通常被认为是DevOps演进的下一阶段,当团队为操作,监视和恢复实施高度自动化的系统时,就会发生NoOps。在这里,当发生故障或一个机器人识别出错误时,另一机器人或自动化流程将执行恢复过程。
消息传递使组织能够更接近NoOps,从积极监视机器和工作流的人员转变为让机器人监视它们,并由人们根据需要监督机器人。这使运营人员和开发人员可以节省时间并提高生产率。
Mattermost是为开发团队推动创新而构建的开源消息传递平台。 支持私有云部署在不牺牲隐私的情况下提供了现代通信的优势。Mattermost为企业提供了自治能力和可扩展性,使他们能够在满足需求的同时提高生产力IT和安全团队的要求。
Mattermost可轻松与流行的DevOps工具集成,例如Jira,Jenkins,GitLab,Trac,Redmine和Bitbucket。免费提供数十种开源集成,包括交互式bot应用程序(例如Hubot和whatmost-bot)以及其他通信工具。
Mattermost支持DevOps工作流程,许多DevOps工作流程都依赖实时协作。团队在关键时刻使用消息传递来提高效率—设置基础架构,合并代码分支或解决紧急错误。Mattermost统一了人员,工具,系统数据和自动化,以帮助您的组织发挥最佳性能。
消息传递是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 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。
## 下载源
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'@'%';
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,utf8\u0026readTimeout=30s\u0026writeTimeout=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
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;
}
}
此时已经安装完成了,可以通过浏览器打开创建管理员用户了。
使用Mattermost的Jenkins插件,您可以自动设置Mattermost中基于Jenkins活动的通知,并使用斜杠与Jenkins互动的命令。 Mattermost让您的团队使用CI / CD工作流程中的现代消息传递以集中化沟通,节省时间并提高可见性和透明度。
通过Mattermost中的斜杠命令与作业进行交互以:与Jenkins服务器连接和断开连接、与Jenkins作业进行交互-创建,触发,启用,禁用或删除; 中止构建或获取构建日志; 或获取工件或测试日志、与插件互动、运行临时命令(例如安全重启)或获取帮助。
点击团队,进入Plugin Marketplace。
搜索关键字"Jenkins",然后安装配置此插件。
添加jenkins服务器的链接、启动此插件。
插件源码:https://github.com/mattermost/mattermost-plugin-jenkins 您也可以通过github下载release包手动安装插件。
随意进入一个频道,然后输入/jenkins
查看集成的命令。
这是一份操作指南,可以根据提示触发Jenkins操作。
/jenkins connect username APIToken ## 连接Jenkins服务器
/jenkins disconnect ## 断开服务器连接接
/jenkins createjob ## 创建一个项目(需要config.xml)
/jenkins build jobname ##触发项目构建
/jenkins abort jobname ## 取消项目构建
/jenkins enable jobname ## 启用一个项目
/jenkins disable jobname ## 禁用一个项目
/jenkins delete jobname ## 删除一个项目
/jenkins get-artifacts jobname ## 获取项目制品
/jenkins test-results jobname ## 获取测试结果
/jenkins get-log jobname ## 获取构建日志
/jenkins plugins ## 获取插件列表
/jenkins safe-restart ## 重启服务
/jenkins me ## 显示我的认证信息
/jenkins help ## 帮助信息
连接服务器,需要创建用户的apitoken。进入jenkins,用户配置,生成APIToken。
/jenkins connect admin 11fb8243f751715789798c7f666485d02f
出现此信息说明连接成功。如果此处出现问题一般是因为网络或者账号信息问题导致的。
构建一个项目
获取项目构建日志
进入插件管理,搜索“mattermost” 安装此插件。
添加webhook,参考文档:https://docs.mattermost.com/developer/webhooks-incoming.html
配置好hook之后会生成一个hook url复制保存,到后续流水线中使用。
生成pipeline
pipeline {
agent any
stages {
stage('Hello') {
steps {
script{
mattermostSend channel: '#town-square',
color: '#439FE0',
endpoint: 'http://xxxx/hooks/bix8xjcb9byefj6rioht1ymrpo',
message: "Build Started: ${env.JOB_NAME} ${env.BUILD_NUMBER}",
text: '@young'
echo 'Hello World'
sleep 10;
}
}
}
}
}
构建测试,能够正常收到消息则成功了。后续通知消息根据自定义即可。
更多精彩关注 DevOps云学堂