内容简介:基于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 命令将仓库的改动推送到所有的远端
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。