zoukankan      html  css  js  c++  java
  • chatops

    一  chatops的概念在国内虽然有一部分的文章谈过,但不是很普遍,这里牛刀小试,做一个有关chatops的功能。

    二 什么是chatops?

    chatops表面上就是在一个聊天工具中,发送一条命令给运维机器人bot,然后bot根据我们预定义的操作进行执行,并返回执行结果。至于更深层次的作用,就是将重复性的手工的运维工作自动化了,开发人员、运维人员可以按需执行一些运维操作。说完这些,我们看看今天实验的一些工具和介绍。

    2.1  RocketChat:可以把它想象成微信,它依赖于MongoDB。

    2.2  hubot:hubot是github出品的一个运维机器人。本质就是一个接收命令消息,执行预定义操作的一个程序。而接收命令消息的这个组件在hubot中被称为adapter,eg:rocketChat的adapter:hubot。市面上已经有很多了。hubot接收命令后如何执行就需要我们来实现了。

    2.3  jenkins:不多讲,应该都知道,CICD的神器。

    三  本文主题

    在RocketChat的聊天窗口命令hubot执行一次jenkins构建任务。

    四  安装

    我的环境

    10.10.0.171    MongoDB、RocketChat Server、Hubot

    10.10.0.144   jenkins

    4.1  MongoDB:

    docker run --name db -d mongo:3.0 --smallfiles

    4.2  RocketChat Server:

    docker run --name rocketchat -p 80:3000 --env ROOT_URL=http://10.10.0.171 --link db -d rocket.chat

    (参考链接:https://hub.docker.com/_/rocket-chat)

    4.3  RocketChat web端访问:http://10.10.0.171

    (同时可以借助客户端连接工具ROCKET.CHAT工具,该工具可以直接下载。)

    首次登陆,我这里创建了一个超级用户fzh42353:

    用fzh42353这个用户登陆,重新打开终端注册一个新用户:bot,密码:bot123(此用户便于hubot连接到rocketchat使用),角色权限如下:

    五  jenkins安装

    docker run --name chat-jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins_workspaces/:/var/jenkins_home jenkins

    六 hubot-rocketchat adapter安装

    docker run -it -e ROCKETCHAT_URL=http://10.10.0.171:80 
        -e ROCKETCHAT_ROOM='general' 
        -e LISTEN_ON_ALL_PUBLIC=true 
        -e ROCKETCHAT_USER=bot 
        -e ROCKETCHAT_PASSWORD=bot123 
        -e ROCKETCHAT_AUTH=password 
        -e BOT_NAME=bot 
        -e HUBOT_JENKINS_URL=http://10.10.0.144:8080 
        -e HUBOT_JENKINS_AUTH=jfsor:c1ee2b0b 
        -e EXTERNAL_SCRIPTS=hubot-pugme,hubot-help,hubot-script-shellcmd,hubot-jenkins 
        -v /opt/scripts:/home/hubot/scripts 
        -d rocketchat/hubot-rocketchat

    我这里添加了hubot-script-shellcmd,hubot-jenkins两个插件,也可以不加上,跑起来后进入容器npm进行安装。

    参数解释:

    ROCKETCHAT_URL: server地址
    ROCKETCHAT_ROOM: 默认加入的channel(房间),可以不填
    ROCKETCHAT_USER: robot名字,我上面的bot
    ROCKETCHAT_PASSWORD: bot的密码:bot123
    ROCKETCHAT_AUTH:认证的方式:password
    HUBOT_JENKINS_URL:jenkins地址,hubot-jenkins插件会用到
    HUBOT_JENKINS_AUTH:登录jenkins的用户名和密码,user:password,hubot-jenkins插件会用到
    /opt/scripts:/home/hubot/scripts: 本地scripts脚本映射到容器内,hubot-script-shellcmd插件会用到

    六  以上过程后,整个搭建工作就算是完成了,接下来看下怎么实践。

    [root@k8s-master-02 ~]# grep -v "^#|  #|^$" /opt/scripts/example.coffee 
    module.exports = (robot) ->
      robot.hear /hi/i, (res) ->
         res.reply "hello"
      robot.hear /吃饭了吗/, (res) ->
         res.send '只有你们这些愚蠢的人类才吃饭'
    hubot@759f2a19692f:~$ cat external-scripts.json 
    ["hubot-pugme","hubot-help","hubot-script-shellcmd","hubot-jenkins"]
    hubot@759f2a19692f:~$ cd -
    /home/hubot/node_modules/hubot-script-shellcmd/bash/handlers
    hubot@759f2a19692f:~/node_modules/hubot-script-shellcmd/bash/handlers$ ls
    helloworld  update
    hubot@759f2a19692f:~/node_modules/hubot-script-shellcmd/bash/handlers$ cat helloworld 
    #!/bin/bash
    echo "Hello.."
    sleep 1s;
    echo "Sleepy World!"

    (上面的example.coffee为自带的测试脚本,此处我进行了适当修改。~/node_modules/hubot-script-shellcmd/bash/handlers下面我们可以自定义可执行的shell脚本。然后shellcmd command即可。)

    hubot-jenkins的用法见下面链接:

    https://www.npmjs.com/package/hubot-jenkins-enhanced

     

    七  上诉我们能实现通过rocketchat server发送命令给hubot adapter进而触发jenkins构建工作,但如果想得到jenkins的返回结果,还少了一部。

    这样我们就拿到结果了,可以看出构建结果是成功的,同时会返回构建时间和构建版本号。

    八  我们可以使用七的方式,通过jenkins插件来完成这件事,同时也可以通过rocketchat的webhook来实现,看下列截图:

    最后保存修改,你可以得到一个webhook url,一个token,一个发送通知的url,eg:

    curl -X POST -H 'Content-Type: application/json' --data '{"text":"Example message","attachments":[{"title":"Rocket.Chat","title_link":"https://rocket.chat","text":"Rocket.Chat, the best open source chat","image_url":"/images/integration-attachment-example.png","color":"#764FA5"}]}' http://10.10.0.171/hooks/wDLZ2y4jsR8rP7gMP/TmirXF8tEbAGo9gNxbvitf5tuBEmWKHGAinxHzB8zMjwXNmp

    修改传输接口即可达到发送通知的目的。url可以在jenkins中设定。

    备注:

    参考链接:https://www.jianshu.com/p/76d547fa23ac

  • 相关阅读:
    电位器的使用
    序言
    跨域之options请求详解
    redis config 实现切库 和指定序列化
    巨坑! druid1.1.0
    跨域问题解决
    canal解决缓存穿透 对数据库同步数据至redis 或EleasticSearch
    oauth2+spring security +jwt 完成分布式服务认证
    oauth2的数据库设计
    Gson 转换 Localdate 使用 GsonBuilder setDateFormat 无效
  • 原文地址:https://www.cnblogs.com/fengzhihai/p/10330683.html
Copyright © 2011-2022 走看看