ChatOps實戰

image.png

ChatOps概念在國內已經有一些文章談過,但是都處于理論范疇。而本文則是一篇ChatOps實踐的文章。

有必要說明我對ChatOps的理解,ChatOps表面上就是在一個聊天窗口中,發送一個命令給運維機器人bot,然后bot根據我們預定義的操作進行執行,并返回執行結果。至于更深層次的作用,就是將重復性的手工的運維工作自動化了,開發人員、運維人員可以按需執行一些運維操作。

另外,我做到了自動化搭建這一套東西(感謝Github上那么多開源項目,讓我少寫很多Ansible腳本)。為什么要自動化搭建呢?因為我懶,我不想每次通過一條條shell手工搭建。

本文主題

在RocketChat的聊天窗口中命令Hubot執行一次Jenkins構建任務。

工具介紹

有必要簡單說明一下我們此次實現ChatOps的這幾個工具。

RocketChat

可以把RocketChat想像成一個具有更多功能的IRC或者微信。它依賴于MongoDB,所以,我們還將自動化安裝MongoDB。

如果你了解過Slack的話,它可以作為Slack的開源替代表。

Hubot

Hubot是Github出品的一個運維機器人。本質上就是一個接收命令消息,執行預定義操作的一個程序。而接收命令消息的這個組件在Hubot中被稱為Adapter。比如我們希望Hubot接收來自RocketChat聊天窗口里的消息,我們就必須為Hubot安裝一個RocketChat的Adapter。市面上,已經有很多Adapter了,我們很少需要自己實現自定義Adapter。

那么,Hubot接收到命令消息后,怎么知道執行哪些操作呢?這部分是需要我們實現了。本質上就是通過正則表達式匹配命令消息,然后操作。實際上通過寫Coffescript腳本實現。比如:

robot.respond /open the (.*) doors/i, (res) ->
    doorType = res.match[1]
    if doorType is "pod bay"
      res.reply "I'm afraid I can't let you do that."
    else
      res.reply "Opening #{doorType} doors"

Jenkins

就這個就不用多介紹了。值得一提是Github已經有不少自動化搭建Jenkins的Ansible腳本了(完全不需要人工干預),本文使用的是geerlingguy的。

Ansible

能讓開發人員快速上手的自動化運維工具。我們使用Ansible實現自動化。想簡單了解Anbible,可以看看簡單易懂Ansible系列 —— 解決了什么

準備環境

需要準備幾臺機器:

IP OS 安裝
192.168.61.11 CentOS7 Jenkins,Openresty(for Jenkins)
192.168.61.14 CentOS7 Openresty(for RocketChat)
192.168.61.15 CentOS7 RocketChat Server, MongoDB,Hubot

因為我是在本地做實驗的,所以需要在本機虛擬化3臺機器。我使用Vagrant + VirtualBox的方式來實現。具體Vagrant如何使用,不在本文討論范圍。你也可以手工在VirtualBox或Vmware上創建相應的虛擬機。Vagrant只不過是自動化了這個過程。Vagrant會基于一個稱為Vagrantfile的文件來創建機器。

Vagrantfile部分內容如下(想看全文件點這):

Vagrant.configure(2) do |config|

  ANSIBLE_RAW_SSH_ARGS = []
  VAGRANT_VM_PROVIDER = "virtualbox"
  machine_box = "CentOS-7.1.1503-x86_64-netboot"
     config.vm.define "p1" do |machine|
       machine.vm.box = machine_box
       machine.vm.network "private_network", ip: "192.168.61.11"
       machine.vm.provider "virtualbox" do |node|
           node.name = "p1"
           node.memory = 2000
           node.cpus = 2
       end
      end
  ##### 此處省略其它機器的配置
end

因為我本地已經存在相應的Vagrant box了,所以,直接使用命令就可以啟動這幾臺機器:

vagrant up p1
vagrant up p4
vagrant up p5

搭建環境

  1. clone 項目
      git clone https://github.com/zacker330/devops-platform.git
      cd devops-platform
    
  2. 執行Ansible自動化部署所有的應用及配置
ansible-playbook -i chatops-inventory chatops-playbook.yml

chatops-inventory 是一個類ini文件,用于描述機器,其實就是對機器進行分組。
chatops-playbook.yml是一個yaml文件,用于描述如何部署我們的應用及配置。

就這樣,我們的Jenkins,RocketChat,Hubot就已經搭建完成了。沒錯,就只需要掃行一條命令。是不是很爽~

RocketChat web客戶端:http://192.168.61.14:3000/初次登錄時,需要先注冊一個超級管理員
Jenkins: http://192.168.61.11/jenkins,默認賬號密碼:admin/admin

至于是如何搭建的,感興趣的同學可以看Ansible代碼。

以下是集成方法及需要注意的地方:

Hubot與RocketChat集成

  1. 設置Hubot運維機器人
    現在需要在RocketChat中添加一個User作為運維機器人,我們選擇
    RocketChat默認用戶rocket.cat作為運維機器人,這里需要注意的是:

    • rocket.cat必須具有的角色:admin、bot
    • rocket.cat必須設置密碼,我設置了為123456
    • 郵箱必須verified,設置時只要勾選上就可以了


      image1.png
  2. 安裝hubot-rocketchat adapter

  3. 啟動時需要指定這幾個環境變量以便Hubot能登錄上RocketChat:

    export ROCKETCHAT_URL="http://192.168.61.15:3000"
    export ROCKETCHAT_ROOM=''
    export LISTEN_ON_ALL_PUBLIC=true
    export ROCKETCHAT_USER=rocket.cat
    export ROCKETCHAT_PASSWORD=123456
    export ROCKETCHAT_AUTH=password
    
  4. 驗證
    因為我們安裝了hubot-friendly腳本,hey一下hubot,它有回應,就說明我們成功集成了RocketChat和Hubot。

    rocketchat-hubot.gif

Hubot與Jenkins集成

  1. 安裝hubot腳本:hubot-jenkins

  2. 配置hubot連接Jenkins的環境變量:

    export HUBOT_JENKINS_URL=192.168.61.14/jenkins
    export HUBOT_JENKINS_AUTH=admin:admin
    
  3. 在RocketChat中,操作Jenkins的job:
    比如列出當前Jenkins的job列表:

    image.png

    再比如執行chatops-demo這個job:


    jenkins-hubot.gif

Jenkins與RocketChat集成

Jenkins與RocketChat集成主要用于當Jenkins的job發生變化時主動推送消息到RocketChat中。

  1. 在Jenkins中安裝Jenkins插件rocketchatnotifier

  2. 在系統設置中,設置rocketchatnotifier參數:


    image.png
  3. 在構建job中設置post build action:


    image.png

    如果你使用的是Jenkins pipeline,rocketchatnotifier也支持

    rocketSend channel: 'general', emoji: ':sob:', message: 'My message', rawMessage: true
    
  4. 驗證
    在Jenkins上手工點擊構建按鈕,RocketChat的ci channel應該會有消息提醒:


    jenkins-rocketchat.gif

小結

至此,我們簡單的ChatOps框架算是搭好了。剩下的就是根據你們自己業務進行改造了。
另外多說一句:思維模式不應該被職位所局限。
項目github地址:https://github.com/zacker330/devops-platform/blob/master/chatops-playbook.yml

本文不明之處,歡迎來郵討論咨詢:apl.359 AT 163.com

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容