今天有幸參加devopsdays活動,首先感謝老板為我提供了這次機(jī)會(主要是給報(bào)銷,贊?。?,起個(gè)大早我就一路奔襲而去了,然后就是排了個(gè)很長隊(duì)等候安檢,是的你沒看錯,是安檢。之后一上午的分享和演講不想多說,直到devops之父Patrick站上講臺,亮了!演講很精彩,贊!演講末尾他分享了很多實(shí)踐,其中講到GitHub的時(shí)候他問了一個(gè)問題,“有誰知道chatops?”結(jié)果1000多人的場子,算上我最多也就不到5個(gè)人舉手,于是乎我覺得我應(yīng)該把之前做過的一些關(guān)于chatops的研究以及經(jīng)驗(yàn)寫下來,讓更多的人知道。
chatops顧名思義,翻譯的直白一點(diǎn)就是用聊天的方式來做ops工作,大體也差不多是這個(gè)意思。chatops用人類最原始和最直接的以會話來驅(qū)動的方式來做事情。什么是以會話驅(qū)動?其實(shí)這種方式充斥著我們的生活,舉個(gè)很普通的例子,我對你說,“請幫我去拿一個(gè)蘋果”,然后你拿了一個(gè)蘋果給我。就是這么簡單,只不過chatops中,“幫我拿蘋果的”是個(gè)虛擬的機(jī)器人。

首先我們要先搞明白chatops涉及到了哪些資源 -- 交付團(tuán)隊(duì), 一個(gè)團(tuán)隊(duì)IM工具(slack, IRC, hipchat...),chat機(jī)器人與基礎(chǔ)設(shè)施(包括服務(wù)器,數(shù)據(jù)庫,配置管理以及系統(tǒng)管理工具等)。接下來我們就以slack做為團(tuán)隊(duì)IM工具來舉個(gè)小例子說明一下chatops是如何運(yùn)做的。交付團(tuán)隊(duì)的成員會在slack的一個(gè)channel(可以把它理解成微信群)中交流和工作,在這個(gè)channel中有這樣一個(gè)特殊的同事,他是一個(gè)聊天機(jī)器人,之后的文章中我們叫他chatbot,當(dāng)交付團(tuán)隊(duì)的成員輸入“@chatbot restart 10.34.33.22"之后,chatbot會調(diào)用后臺的api將ip地址是”10.34.33.22“的vm重起,然后把重啟后的狀態(tài)回復(fù)到slack channel中。想像一下沒有chatops的情況下團(tuán)隊(duì)成員會如何完成這件小事兒 -- 1.打開terminal 2. ssh到相應(yīng)的vm 3. 輸入密碼 4.run "reboot" 5. 等一會兒 6. 再次ssh到vm 7. 再次輸入密碼 8. 檢查相關(guān)信息,是不是有一些繁瑣,而chatops只是@了一下chatbot而已,很方便,很cool對嗎?
那么這樣一件有趣且有價(jià)值的事情是如何做到的呢,我來解釋一下,slack channel中的chatbot會監(jiān)聽address給他的消息(當(dāng)然也可以監(jiān)聽當(dāng)前channel的所有消息,以后有機(jī)會會給大家解釋),通過一個(gè)叫做“正擇匹配”的古老且長青的技術(shù)來篩查是不是有需要響應(yīng)的關(guān)鍵字,一旦匹配到chatbot就會堅(jiān)定不移的執(zhí)行相對應(yīng)的action。就上面的例子來說就是chatbot監(jiān)聽到“@chatbot restart 10.34.33.22",然后“正擇匹配”匹配到了restart命令,于是他對命令做出響應(yīng),執(zhí)行了restart命令對應(yīng)的function去重啟vm并回傳結(jié)果。這只是一個(gè)簡單的例子用來說明chatops是如何工作的,chatops的功能很強(qiáng)大應(yīng)用很廣泛,尤其在大型合做項(xiàng)目和大型互聯(lián)網(wǎng)或云計(jì)算項(xiàng)目中最為明顯。
如果大家對chatops感興趣,接下來我會分享我對chatops一些感悟以及如何從零開始做一個(gè)chatbot.