最近写代码的实践: 如何优雅的发送通知

时间:2021-1-8 作者:admin

接上文 最近写代码的感悟,如何摆脱搬砖

当我完成解耦adjust之后,我又开始思考,每次我更新完代码,如果通知测试去测试呢。是完整打包去测,还是只需要更新adjust key 而不需要再次打包。

使用飞书消息

公司内部通讯使用的飞书,这个工具里面有一个简单便捷的群机器人功能。在群—设置—群机器人里可以添加,然后你会获得一个post接口地址

axios({
    url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx",
    data:{
    msg_type: "post",
    content: {
      post: {
        "zh_cn": {
          "title": "【通知】代码push通知,请注意测试",
          "content": [
            [
              {
                "tag": "at",
                "user_id": "all"
              },
              {
                "tag": "text",
                "text": `\r\n【项目】${projectName}\r\n【提交人】${userName}\r\n【测试类型】${testType}\r\n-----------\r\n【更新内容】:\r\n${text}`
              }
            ]
          ]
        }
      }
    }
   }
  })

git webhook 触发

大部分git托管都有webhook,具体的设置不再赘述,基本上也是一个get或post接口,每次push或者merge的时候,都可以设置回调,自动给你的接口地址发送一条消息。

这时候,你需要一个web服务。

通过腾讯云开发转发消息

这时候我就想到了腾讯云开发,因为它有免费版的可以撸,也减少了配置环境的麻烦。具体大家可以参考我之前的文章腾讯cloudBase入门.

在里面新建一个云函数,webhook。index.js主要是接受一下参数

'use strict';
const {sendFeishu} =require('./request')
exports.main = async (event, context) => {
    console.log(event)
    let res = {}
    try {
        const body = JSON.parse(event.body)
        res = await sendFeishu(body)
    } catch (error) {
        console.log('error: ', error);
    }
    // console.log(context)
    return res
};

request.js就是发送飞书通知了

const axios = require('axios')
const Service = axios.create({
  method: 'post'
})
const sendFeishu = function (body) {
  const userName = body.pusher.name
  const projectName = body.project.display_name

  if (body.ref.indexOf('dev') === -1 || projectName !== 'web_baseline_v2') {
    return true
  }
  const commits = body.commits
  let text = ''
  let testType = ''
  if (commits && commits.length) {
    for (const k of commits) {
      text += `${k.message.replace(/(^\s*)|(\s*$)/g, '')};\r\n`
      if (k.modified.length <= 2 && k.modified.includes('adjustKeys.config.js')) {
        testType = '仅测试adjust'
      } else {
        testType = '完整测试'
      }
    }

  }
  console.log('text: ', text);
  const data = {
    "msg_type": "post",
    "content": {
      "post": {
        "zh_cn": {
          "title": "【通知】代码push通知,请注意测试",
          "content": [
            [
              {
                "tag": "at",
                "user_id": "all"
              },
              {
                "tag": "text",
                "text": `\r\n【项目】${projectName}\r\n【提交人】${userName}\r\n【测试类型】${testType}\r\n-----------\r\n【更新内容】:\r\n${text}`
              }
              // {
              //   "tag": "a",
              //   "text": "Worktile地址:Test SE04-001",
              //   "href": "https://gpower.worktile.com/mission/projects/5c64fe098b65046aa29ea321/tasks/5efdbf279e60b004e401ad1c"
              // }

            ]
          ]
        }
      }
    }
  }
  console.log('data: ', data);
  return Service({
    url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxxx",
    data
  })
}
module.exports = {
  sendFeishu
}

最后完成的效果就是这样了,还挺不错的。把测试们也拉入群,就可以了。

结语

还是那句话,减少搬砖,多写点能让你开心的代码

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。