CoolQ/DingTalk 實現CI/CD消息推送到羣

基於Gitlab 的 CI/CD 流程搞好後,須要將CI Job或流水線的執行狀態通知到給相關QA或者開發人員,整個大前端組,項目系統工程數量>15個,因此有必要聚合CI/CD相關自動化流水線信息,將相關須要關注的信息經過機器人自動推送到羣裏。前端

工做上經常使用羣的話選擇有微信羣,釘釘,QQ羣等。微信如今限制了2018年以後註冊的新用戶沒法經過腳本走API登陸,很難搞到2016年註冊的小號,所以只能選擇釘釘羣和QQ羣了,由於我司不用釘釘,有本身的OA系統,因此就嘗試了酷Q的機器人推送方案。下面將詳細介紹實現過程。node

釘釘機器人消息推送到羣

DingTalk (釘釘) 提升了羣機器人,提升webhook來實現,特別的方便,消息發送還支持各類格式的模板,好比text、link、markdown等,加強了使用情景和體驗。關於釘釘自定義機器人,官方文檔也很詳細,這裏很少介紹實現過程。詳細見:自定義機器人python

經過 shell script實現模板信息發送

如下主要是消息通知到羣的 shell script.git

# 前一個命令執行狀態判斷是成功信息仍是失敗信息
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 ""
}

複製代碼

效果

dingtalk

基於酷Q搭建 QQ機器人消息推送到羣

搭建服務以前,須要瞭解CoolQ是如何工做的,以及若是經過 CoolQ HTTP API 來推送信息,官方文檔:cqhttp.cc/docs/github

本人在windows 非docker的方式搭建過了一次,而後再在Linux 系統上搭建過一次,整體以爲,仍是docker比較方便,經過官方提供的Docker服務,部署測試經過後,寫對應的腳原本實現消息推送到QQ羣。web

Docker 服務安裝

官方文檔:Docker,如下是我的操做步驟記錄。docker

(1)拉取 cqhttp 鏡像shell

docker pull richardchien/cqhttp:latest
複製代碼

(2)用於存儲 酷Q 的程序文件json

mkdir coolq  
複製代碼

(3)後臺運行 docker 服務windows

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的應用目錄

coolq

(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請求測試

TIM截圖20190619104434

測試方式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'
});


複製代碼

效果:

qq

到此,就完成了測試了,整個過程已經聯調通,最後至於使用shell來直接請求推送消息,仍是經過node.js、python等腳原本推送消息,均可以,看我的喜愛了。

搭建過程,試了遠程執行shell script和node.js 腳本,不亦樂乎(注意腳本安全性)。

curl nodejs


Author: @giscafer,原文地址:front-end-manual/CoolQ/DingTalk 實現CI/CD消息推送到羣 , 歡迎討論

相關文章
相關標籤/搜索