内容简介:基于Gitlab 的 CI/CD 流程搞好后,需要将CI Job或流水线的执行状态通知到给相关QA或者开发人员,整个大前端组,项目系统工程数量>15个,所以有必要聚合CI/CD相关自动化流水线信息,将相关需要关注的信息通过机器人自动推送到群里。工作上常用群的话选择有微信群,钉钉,QQ群等。微信现在限制了2018年之后注册的新用户无法通过脚本走API登录,很难搞到2016年注册的小号,因此只能选择钉钉群和QQ群了,因为我司不用钉钉,有自己的OA系统,所以就尝试了酷Q的机器人推送方案。下面将详细介绍实现过程。D
基于Gitlab 的 CI/CD 流程搞好后,需要将CI Job或流水线的执行状态通知到给相关QA或者开发人员,整个大前端组,项目系统工程数量>15个,所以有必要聚合CI/CD相关自动化流水线信息,将相关需要关注的信息通过机器人自动推送到群里。
工作上常用群的话选择有微信群,钉钉,QQ群等。微信现在限制了2018年之后注册的新用户无法通过脚本走API登录,很难搞到2016年注册的小号,因此只能选择钉钉群和QQ群了,因为我司不用钉钉,有自己的OA系统,所以就尝试了酷Q的机器人推送方案。下面将详细介绍实现过程。
钉钉机器人消息推送到群
DingTalk (钉钉) 提高了群机器人,提高webhook来实现,特别的方便,消息发送还支持各种格式的模板,比如text、link、markdown等,增强了使用情景和体验。关于钉钉自定义机器人,官方文档也很详细,这里不多介绍实现过程。详细见:自定义机器人
通过 shell script实现模板信息发送
以下主要是消息通知到群的 shell script.
# 前一个命令执行状态判断是成功信息还是失败信息
if [ "$?" -eq "0" ];then
log "[OK]"
DEPLOY_SYSTEM="${!YZT_ENV_SERVER_IP2}:${!YZT_ENV_SERVER_PORT2}"
sendDingTalkSuccessNotifications
else
logStep ">> $?"
DEPLOY_SYSTEM="${!YZT_ENV_SERVER_IP2}:${!YZT_ENV_SERVER_PORT2}"
sendDingTalkErrorNotifications
fi
# 相关脚本
function sendDingTalkErrorNotifications() {
DEPLOY_STATUS='部署失败!'
sendDingTalkNotifications
}
function sendDingTalkSuccessNotifications() {
DEPLOY_STATUS='部署成功!'
sendDingTalkNotifications
}
# 推送模板发送(模板拼接)
function sendDingTalkNotifications() {
logStep " STEP 5 - Send Notifications to DingTalk"
local title="「前端CI/CD」 ${PROJECT_NAME}"
local text="### ${title} \n #### 构建分支:${CI_COMMIT_REF_NAME} \n #### 构建状态:${DEPLOY_STATUS}\n #### 部署主机:${DEPLOY_SYSTEM} \n #### 提交者:${GITLAB_USER_EMAIL} \n\n\n ##### [流水线 Pipeline #${CI_PIPELINE_ID}](${CI_PROJECT_URL}/pipelines/${CI_PIPELINE_ID}) \n"
curl POST "$CI_DINGTALK_WEBHOOK_URL" -H 'Content-Type: application/json' -d "{\"msgtype\": \"markdown\",\"markdown\": {\"title\":\"$title\",\"text\": \"$text\"}}"
# curl POST "$CI_DINGTALK_WEBHOOK_URL" -H 'Content-Type: application/json' -d '{ "msgtype": "markdown", "markdown": {"title":"CI/CD cmp-web","text": "##### 构建分支:test \n Pipelines状态:成功\n ######## [流水线Pipeline #3181](http://git.1ziton.com/front-end/cmp-web/pipelines/3181) \n"}}'
}
function log() {
echo "$(date):$@"
}
function logStep() {
echo "$(date):====================================================================================="
echo "$(date):$@"
echo "$(date):====================================================================================="
echo ""
}
复制代码
效果
基于酷Q搭建 QQ机器人消息推送到群
搭建服务之前,需要了解CoolQ是如何工作的,以及如果通过 CoolQ HTTP API 来推送信息,官方文档:cqhttp.cc/docs/
本人在windows 非 docker 的方式搭建过了一次,然后再在 Linux 系统上搭建过一次,总体觉得,还是docker比较方便,通过官方提供的Docker服务,部署测试通过后,写对应的脚本来实现消息推送到QQ群。
Docker 服务安装
官方文档:Docker,以下是个人操作步骤记录。
(1)拉取 cqhttp 镜像
docker pull richardchien/cqhttp:latest 复制代码
(2)用于存储 酷Q 的程序文件
mkdir coolq 复制代码
(3)后台运行 docker 服务
docker run -d --rm --name cqhttp-devops -v $(pwd)/coolq:/home/user/coolq -p 9000:9000 -p 18936:5700 -e COOLQ_ACCOUNT=你要登录的QQ号码 -e CQHTTP_POST_URL=http://你的服务器ip:8080 -e CQHTTP_SERVE_DATA_FILES=yes richardchien/cqhttp:latest 复制代码
介绍一下简单的docker操作命令给新人,查看 cqhttp-devops 的 docker日记可以用 docker logs -f cqhttp-devops , 删除命令: docker rm -f cqhttp-devops
(4)访问 http://服务器ip:9090
访问正常后,表示服务正常,点击 连接 ,输入默认密码 MAX8char ,即可进入虚拟机,登录机器人用的QQ账号即可,安全问题,酷Q限制必须是开启了 登录保护 的QQ,才可以登录。
登录成功后,运行CoolQ Air , 会如下图所示,可以查看HTTP API的应用目录
(5)修改AccessToken 和 Secret
这两个东西是要在接口请求的时候做认证的,保证安全性,避免被别人直接走接口发送信息。
进入第四步骤中 http api 对应的目录下,找到自己登录的 qq 号对应的json文件修改即可。比如 123456.json,如果没有,就是 .ini 后缀,详细见官方文档说明Configuration
我的配置是如下,操作时改为自己的即可。
[general] host = 0.0.0.0 post_url = http://192.168.100.100:8080 [3616909583] access_token = Mgep4rV49rM8Jf port = 5700 复制代码
测试消息推送
创建一个群,或者拉你所用的QQ机器人到一个群里,使用curl 方式或者 postman 测试都可以,也可以使用node.js脚本测试
测试方式1:postman get请求测试
测试方式2:nodejs代码测试:
const request = require('request');
const COOLQ_HTTP_URL = '192.168.100.100:18936'; // 你的ip:端口(docker部署运行时设置好的)
const ACCESS_TOKEN = 'Bearer 你的';
const configOptions = {
url: `http://${COOLQ_HTTP_URL}/send_group_msg`,
method: 'get',
headers: {
// 'Content-Type': 'application/json',
authorization: GITLAB_TOKEN
},
qs: {
message: 'test23232322',
group_id: '807533895'
}
};
function getOption(params) {
const message =
`「${params.title}」\n` +
`内容:${params.content}\n` +
'----------------------------------\n' +
`原链接:${params.url}\n`;
configOptions.qs = {
message,
group_id: params.group_id
};
return configOptions;
}
function sendGroupMsg(body) {
let opt = getOption(body);
request(opt, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log('success');
console.log(body);
}
});
}
sendGroupMsg({
text: 'text',
title: 'CoolQ/DingTalk 实现CI/CD消息推送到群',
content: '内容',
url: 'https://github.com/giscafer/front-end-manual/issues/31',
group_id: '807533895'
});
复制代码
效果:
到此,就完成了测试了,整个过程已经联调通,最后至于使用 shell 来直接请求推送消息,还是通过node.js、 python 等脚本来推送消息,都可以,看个人喜好了。
搭建过程,试了远程执行shell script和node.js 脚本,不亦乐乎(注意脚本安全性)。
Author: @giscafer ,原文地址: front-end-manual/CoolQ/DingTalk 实现CI/CD消息推送到群 , 欢迎讨论
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 从宇宙大尺度结构到胎心监测,从手机消息推送到物联网大数据处理:跨界是创新的主要源泉
- Git 推送到多个仓库
- 推送到私人nuget饲料提示证书
- VMware公司将虚拟桌面的控制平台推送到Azure Cloud
- 如何自制一个Spring Boot Starter并推送到远端公服
- 使用一句 git 命令将仓库的改动推送到所有的远端
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Smashing Book
Jacob Gube、Dmitry Fadeev、Chris Spooner、Darius A Monsef IV、Alessandro Cattaneo、Steven Snell、David Leggett、Andrew Maier、Kayla Knight、Yves Peters、René Schmidt、Smashing Magazine editorial team、Vitaly Friedman、Sven Lennartz / 2009 / $ 29.90 / € 23.90
The Smashing Book is a printed book about best practices in modern Web design. The book shares technical tips and best practices on coding, usability and optimization and explores how to create succes......一起来看看 《The Smashing Book》 这本书的介绍吧!