IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    ChatOps:Hubot和BearyChat简介

    夜行人发表于 2016-04-09 09:20:55
    love 0

    目标

    快速做到任何有网的地方可以处理

    背景说明

    1. 我们部分服务是内网的,也就是出了公司就无法处理,或者需要打开电脑,需要vpn,相对来说,有一点不方便
    2. 一个功能开发是需要时间的,例如一个审批流程,涉及逻辑,界面,测试
    3. 假设我们现在有个git仓库,代码提交后,我们希望做一些事情,但前提是在做之前,需要人工审核下提交的内容,如何可以做到不用开电脑,不用vpn,用一台手机就可以快速地进行处理?BearyChat就可以,如果需要更强大,更方便,可以整合Hubot

    BearyChat的2个机器人

    BearyChat自带了2个机器人,Incoming和Outgoing,现在让我们来看看如何用他们来把我们的审核流程串起来

    1. 注册BearyChat,进去后,添加一个讨论组,例如叫abc
    2. 去到机器人管理,添加Incoming机器人,给它一个名字,例如叫chathubot,选择发给它的内容要转发到哪里,我们选择发送到abc,这时会得到一个hook地址,还有说明文档,我们拿到hook地址
    3. 在git里部署hook,和svn一样,git钩子分2种:客户端和服务器端,本例中,比较理想是用服务器端的post-receive,但查了资料,gitbucket并不支持服务器端钩子,那本例中只能用post-commit这个本地钩子,钩子代码见下面
    4. 此时,git提交的diff内容和版本号已经发送到abc讨论组了,我们来设置Outgoing,设置名字后,设置“触发词”和“POST地址”,就是定义在聊天里发送了什么内容,触发BearyChat这个Outing机器人,向“POST地址”提交内容。我们设置触发词为「!upgit」,post地址为我们httpsqs的地址
    5. 我们安装BearyChat客户端或者在网页端,选择abc讨论组,发送「!upgit 1ae4082」,「1ae4082」为本次git提交的版本号,这时机器人就会把一段信息发送到httpsqs,发送的消息内容见下文
    6. 从httpsqs获取内容并做操作,好像没什么好说的了

    post-commit

    #!/usr/local/bin/python2.7
    #-*- encoding:UTF-8 -*- 
    # johncan 2016-04-03 17:32:17
    
    import sys  
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    import commands
    import requests
    import json
    
    incommint_url='https://hook.bearychat.com/xxxx'
    git_ci_content = commands.getoutput('/usr/bin/git log -1 -p pre-commit')
    
    payload = {"text":git_ci_content}
    
    headers = {'content-type': 'application/json'}
    r = requests.post(incommint_url, data=json.dumps(payload), headers=headers)
    # print r.content
    

    Outgoing机器人post的消息内容参考

    {
        "channel_name": "abc",
        "subdomain": "xxxx",
        "text": "!upgit 1ae4082",
        "token": "xxxx",
        "trigger_word": "!upgit",
        "ts": 1459824707044,
        "user_name": "xxxx"
    }

    和Hubot整合

    这个对于我们目前的需求来说,不是必须的

    安装Hubot

    一些说明

    1. 环境说明:CentOS 6.2 64bit
    2. Hubot很多东西都是通过环境变量来设置
    # 设置debug模式
    export HUBOT_LOG_LEVEL="debug"
    # 设置监听端口
    export EXPRESS_PORT=8081

    开始安装

    yum install nodejs npm redis -y
    # 此处请修改redis安全配置,然后启动redis
    # 网上也有资料说不用redis也可以
    /etc/init.d/redis start
    npm install -g coffee-script hubot yo generator-hubot
    # 比较奇怪,用root初始化hubot会出错,下面用普通用户初始化hubot
    useradd bchubot
    su - bchubot
    sudo mkdir /data/bchubot
    cd /data
    sudo chown bchubot.bchubot bchubot
    cd bchubot
    yo hubot
    npm install hubot-bearychat --save

    BearyChat添加Hubot

    去到机器人管理,添加Hubot,这里会生产一个Token,复制Token

    启动hubot

    export HUBOT_BEARYCHAT_TOKENS='token_from_bearycaht'
    export EXPRESS_PORT=8081
    /data/bchubot/bin/hubot -a bearychat

    BearyChat填写Hubot地址

    http://hubot_ip:hubot_port/

    此时可以测试发送消息给hubot,测试指令精选

    # hubot会回PONG
    ping
    # 会发送一张gif的http地址
    pug me

    Hubot的动作是需要用coffee-sctipts写的,没有深入研究

    其他

    hubot的启动

    网上很多资料都说可以直接运行hubot就可以跟它聊天,我测试是不行的,campfire是它的默认插件,所以,最简单的应该是这个指令

    hubot -a campfire

    post提交数据类型

    如果data中含有换行符和&等字符,需要用这种方式发,当时在这里耗了一天的时间

    import json
    url = 'https://api.github.com/some/endpoint'
    payload = {'some': 'data'}
    headers = {'content-type': 'application/json'}
    
    r = requests.post(url, data=json.dumps(payload), headers=headers)

    更多可以参考Requests的文档

    一个用Hubot做发布的案例

    湾区日报的第一个“员工”:Slack/Hubot



沪ICP备19023445号-2号
友情链接