配置消息推送服务器,自动化部署和消息推送
一、前言
1、思考:如何取得平衡?
代码写的太简单,可复用性较低,易读易懂;
代码写的太抽象,有一定的复用性,维护成本较高,需要专人维护,否则可能引起牵一发而动全身的问题。
如何避免过度抽象,过度简单,具备一定抽象性,但是人人都能维护,分离逻辑和配置。
2、软件设计
什么时候选择自顶向下?什么时候选择自底向上?不知道怎么做,先小思做起来,后再思;知道怎么做,先大思开始做,后再思。
3、分析现状
目前代码业务性太强,如果新建业务线,需要读一遍代码,结合具体项目改数据改配置。且一部分push监控在mainApp进行,一部分push监控在find-error-info项目监控。
4、本次开发与之前代码的不同之处
分离逻辑和数据配置,配置层,获取数据,处理数据,选择通知工具,数据推送。添加评论通知功能。
5、旨在解决什么问题
以后如果新起业务线,做类似功能,不用考虑逻辑如何,改改配置文件即可。
二、学习与再设计
1、参考文档
https://gitlab.pahf.com/help/user/project/integrations/webhooks
https://ding-doc.dingtalk.com/doc#/serverapi2/hoy7iv
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
2、参考代码
https://gitlab.pahf.com/f2e/find-error-file
3、重新设计的代码
https://gitlab.pahf.com/fe-experienment/monitor-app-server-test
三、问题记录
1、【gitlab】Hook execution failed: Net::ReadTimeout
在gitlab配置钩子,点击test的时候,出现报错。在接口里面添加如下代码即可。
return res.json({
code: 1,
})
再次点击test,出现Hook executed successfully: HTTP 200,说明配置成功。
2、【linux】E45: 'readonly' option is set (add ! to override)
:wq!,强制保存退出。
3、【钉钉】不能收到消息
{"errcode":300001,"errmsg":"robot type do not match with the message"}
因为webhook地址用成了gitlab机器人的,换成自定义机器人就好了。
4、【钉钉】sign not match
需要在钉钉通知的消息代码里面添加在钉钉群配置的自定义关键词。
5、【钉钉】token is not exist
代码里面的token和钉钉里面的token不一致。
6、每次都要重启nginx和服务端吗?
一般修改了nginx配置,才需要去重启nginx, nginx -s reload。如果修改了服务端文件,需要重启服务端,到服务端项目的根目录执行make stop/make start。
虽然这个问题是常识,但是难免会忘记,如果修改了代码,没起效,看看是否需要重启?不同的服务端项目,重启服务端的命令可能不同,需要看开发者的设计。
四、一些配置
1、配置gitlab的webhook
在mainApp主项目,进入settings/integrations,在url填入你写的服务,勾选相应的钩子。比如http://10.3.7.76:8182/webhook/comment,就勾选Comments的trigger。
2、配置钉钉
在实验阶段,先拉3个人建立一个群,再把人移出去,智能群助手,添加机器人,应该选择自定义(通过webhook接入自定义服务)机器人,不要选择gitlab机器人。
然后设置自定义机器人,机器人名字,添加到群组,安全设置。
记住webhook和安全设置,到时候会在服务端代码用到。
3、nginx配置
# monitorApp,服务端
server {
listen 80;
server_name monitortest.pahfqc.com;
location / {
proxy_pass http://127.0.0.1:8182;
}
}
# mainApp,浏览器端
server {
listen 80;
server_name mainapptest.pahf.la 10.3.7.76;
root /frontend/mainApp/dist;
location / {
index index.html;
try_files $uri /index.html;
}
}
五、编码阶段
1、主项目(客户端)mainApp
省略。。。。。
2、监控项目(服务端)monitorApp
processCommentMsg方法包装从gitlab获取的数据,然后通过工具(比如钉钉)进行消息推送,最终以希望的格式显示到群里。
// processCommentMsg.js 评论,codereview
const https = require("https");
processCommentMsg = (json) => {
console.log(json);
const dingdingReq = https.request(
`https://oapi.dingtalk.com/robot/send?access_token=70fd6914fb1177ecc11ec97308b0205167126759db242311c37f149d7dff94ef`,
{
method: "post",
headers: {
"Content-Type": "application/json;charset=utf-8"
}
},
(res) => {
console.log("获取响应:" + res.statusCode);
res.on('data', function (d) {
console.log("状态码:" + d);
}).on('end', function () {
console.log('请求结束:', res.headers)
});
}
);
const zdyContent = '监控报警:' + '这是一条消息';
const atMobilesArr = [
{
names: ['小芳', 'xiaofang'],
phone: '18816968510',
}]
// 读取config配置,可以传文本格式及是否AT所有人。
const textInfo = {
msgtype: "text",
text: {
content: zdyContent
},
at: {
atMobiles: atMobilesArr,
isAtAll: false
}
};
dingdingReq.write(JSON.stringify(textInfo));
dingdingReq.end();
}
// push.js, 提交代码,一则推送消息,二则更新服务器代码,并重新构建。
processPushMsg = () => {
const { exec } = require('child_process')
const command = [
"cd /frontend/mainApp",
"git fetch --all",
"git reset --hard origin/master",
"git pull --rebase",
"yarn",
"yarn build"
].join(' && ');
exec(command);
}
// app.js
const express = require('express');
const app = express();
app.all('/webhook/comment', async (req, res) => {
let json = getJSON(req.body);
processCommentMsg(json);
return res.json({
code: 1,
})
});
app.all('/webhook/push', async (req, res) => {
let json = getJSON(req.body);
processPushMsg(json);
return res.json({
code: 1,
})
});
app.listen('8182', () => {
console.log('监听端口');
});
# makefile
start:
yarn
pm2 start src/app.js --name monitorApp
stop:
pm2 stop monitorApp
reload:
git checkout .
git pull --rebase
yarn
pm2 reload monitorApp
在服务器上,make start,启动monitorApp,监听接口,守护进程。
六、测试
在gitlab上,打开主项目mainApp,找到webhook,点击test,选择评论钩子,查看钉钉群是否能收到消息。选择某一个merge request,对曾经修改的某个文件进行评论,codereview。鼠标放到代码行左侧,会看到气泡图标。
七、流程图
【温馨提示】该文档将长期更新,新加内容,或另起文章连载同一个话题。
标签:const,部署,res,代码,gitlab,json,自动化,推送,服务端
来源: https://www.cnblogs.com/camille666/p/gitlab_automatic_deploy_message_send.html
配置消息推送服务器,自动化部署和消息推送相关推荐
- Java Web项目在Linux服务器自动化部署续-整合Bamboo
前言 Java Web项目在Linux服务器自动化部署 在这一篇中, 完成的是一个自动化部署的脚本. Atlassian Bamboo 是一款持续集成构建服务器软件(Build Server) 软件地 ...
- 苹果的消息是从服务器接收数据,iOS 消息推送原理及简单实现
从图中可以很清楚的看出来推送的原理主要分为以下几步: 1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送. 2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UD ...
- 微软软件推送服务器,向 UWP 应用添加推送通知 - Azure Mobile Apps | Microsoft Docs
向 Windows 应用添加推送通知 06/25/2019 本文内容 概述 本教程介绍如何向 Windows 快速入门项目添加推送通知,以便每次插入一条记录时,向设备发送一条推送通知. 如果不使用下载 ...
- 苹果微信推送服务器错误,接入WxPusher微信推送服务出现错误:Content type application/x...
背景 使用WxPusher微信推送服务 ,可以及时的将服务的一些运行异常信息,发送到自己的微信上,方便了解服务的运行状态(PS:这个服务是免费的). 你可以在这里看到WxPusher微信推送服务的接入 ...
- 消息推送服务器令牌,小程序-消息推送配置Token令牌错误校验失败如何解决
网上借个图 按微信要求:确认此次GET请求来自微信服务器,则原样返回echostr参数内容 都按要求来了,但怎么都不行,总是提示:Token校验失败,请检查确认 /** * 检验签名 */ publi ...
- 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务
一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...
- 友盟消息推送服务器demo,友盟消息推送总结
分享的文章连接 1 http://blog.csdn.net/shenjie12345678/article/details/41120637 2:http://dev.umeng.com/push ...
- 苹果服务器消息转发,iphone-与APNS服务器进行交互以将推送通知发...
最好的方法是使用API??,例如以下服务提出的建议: >选择一个Saas API,将其连接到PHP / MySQL应用程序 >城市飞艇 > Pushwoosh > Wonder ...
- Java Web项目在Linux服务器自动化部署
项目介绍 使用Spring+Hibernate开发的Java Web 项目, 在Perforce上做的代码控管, 部署到Linux(Redhat)下的Tomcat服务器上. 手动部署繁琐,如果涉及文件 ...
最新文章
- 关于深度学习的小知识点
- 部署了OpenStack就拥有了云平台?还差很远呢
- IDEA打开html文件时显示错误browser error提示找不到chrome或者别的浏览器
- c++17(22)-reinterpret_cast和new动态空间内存申请
- 【面试招聘】非科班小白上岸的学习路线
- uTools:一个方法“改变”uTools的插件安装/数据目录
- 从产品角度谈如何搞定主动用户与被动用户
- 事件图谱的构建、推理与应用
- 使用Eclipse编译运行MapReduce程序_Hadoop2.6.0_Ubuntu/CentOS
- 让你的Win10桌面比macOS还简洁漂亮高大上
- Learning records1:nltk安装的一些注意点(学习自用)
- Jmeter在win10上字体界面小永久调大方法
- 《国产操作系统之银河麒麟》安装VNCserver插件
- 会汇编语言学c语言好学吗,只有C语言功底的我学习汇编语言可以吗?
- c语言编译器a安卓,c语言编译器手机版下载-c语言编译器appv7.1 安卓版 - 极光下载站...
- JavaScript实现树结构(一)
- 解决0x00000001电脑蓝屏问题
- wu-database-lazy-starter(懒人数据库操作-核心增量式更新)
- 吉林大学软件学院编译原理与实现习题(二) 期末复习用
- MyBatis学习记录