Ansible 發(fā)送 notification 到 Slack

2018-07-25 10:48 更新

Slack 是當(dāng)前火紅的線上通訊服務(wù),在臺(tái)灣業(yè)界 1 也有許多開發(fā)團(tuán)隊(duì)在使用。除了可以用它與內(nèi)部成員溝通外,透過發(fā)送通知訊息 (notification)、聊天機(jī)器人 (Chatbot) 等的資訊整合后,更發(fā)展出 ChatOps 2 一詞來形容這樣子的生態(tài)系。這次就讓凍仁分享一下 Ansible 整合 Slack 的小小心得。

automate_with_ansible_practice-21.jpg 

▲ 上圖為 Ansible 發(fā)送 notification 到 Slack 的范例。

slack module 是什么?

slack module 是用來發(fā)送訊息到 Slack 上的通知模組 (notification modules),并借由整合 Slack Incoming Webhook 功能進(jìn)行使用。

Ansible 怎么整合 Slack?

  1. 撰寫發(fā)送 notification 到 Slack 的 Playbook:請(qǐng)依步驟 2 取得的參數(shù)設(shè)定 slack_domainslack_token 和 slack_channel 等變數(shù),若要發(fā)送 notification 到某個(gè) Channel,可改用 #channel_name。

     $ vi send_notification_to_slack.yml
     ---
     - name: Send notification to Slack
       hosts: localhost
    
       vars:
         slack_domain: 'example.slack.com'
         slack_token: 'xxxxxxxxxxxxxxxxxxxxxxxx'
         slack_channel: "@username"
    
       post_tasks:
         - name: send notification to slack
           slack:
             domain: ""
             token: ""
             username: "ansible"
             channel: ""
             color: "normal"
             msg: "Send a notification with Ansible !"
    
     # vim: ft=ansible :
    
  2. 取得 Slack 的相關(guān)設(shè)定。

    1. 登入 Slack 后,進(jìn)入 Mamage (管理) 界面。

      2016-12-16-ansible-slack-1.png

    2. 進(jìn)入 Custom Integrations (自定整合),并找到 Incoming WebHooks。

      2016-12-16-ansible-slack-2.png

    3. 點(diǎn)擊 Add Configuration 新增一個(gè) WebHooks 給 Ansible 使用。

      2016-12-16-ansible-slack-3.png

    4. 新增好 WebHooks 后的畫面如下。

      2016-12-16-ansible-slack-4.png

    5. 將頁(yè)面往下卷至 Integration Settings (整合設(shè)定) 。

      2016-12-16-ansible-slack-5.png

    6. 設(shè)定 Post to Channel (預(yù)設(shè)發(fā)送頻道) :可先用 @username 進(jìn)行測(cè)試。

    7. 取得 Webhook URL:以底下的 URL 為例,其中的 CCCCCCCCCCCCCCCCCCCCCCCC 即為 slack module 中的 token,也就是 send_notification_to_slack.yml Playbook 里所缺少的 slack_token

      https://hooks.slack.com/services/AAAAAAAAA/BBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC

    8. 最后上傳一張 Ansible 的圖示以利辨識(shí)。

      2016-12-16-ansible-slack-6.png

  3. 執(zhí)行 Playbook。

     $ ansible-playbook send_notification_to_slack.yml
    
     PLAY [Send notification to Slack] **********************************
    
     TASK [setup] *******************************************************
     ok: [localhost]
    
     TASK [send notification to slack] **********************************
     ok: [localhost]
    
     PLAY RECAP *********************************************************
     localhost      : ok=2    changed=0    unreachable=0    failed=0
    
  4. 在 Slack 接收從 Ansible 送出的 notification。

    2016-12-16-ansible-slack-7.png

  5. 現(xiàn)在我們的成功把 Ansible 和 Slack 整合好了!

順帶一提,若不想在每個(gè) Playbooks 都重復(fù)宣告 slack_domainslack_token 和 slack_channel 等變數(shù),可使用「Ansible 使用 Template 系統(tǒng)」一章提到的 vars_files 進(jìn)行改寫。

后話

讓 Ansible 發(fā)送 notifications 到 Slack 后,我們除了可以提醒自己有哪些 Playbooks 完成外,更可便于其它成員追蹤相關(guān)任務(wù)的進(jìn)度和執(zhí)行狀態(tài)等。

相關(guān)連結(jié)

1. 凍仁之前任職的 commandp Inc. 即為 Slack 的商業(yè)用戶之一。 ?
2. ChatOps 一詞凍仁曾在「怎么部署 Ansible 環(huán)境?」一章有提過,相信已有不少公司會(huì)借由 Slack 這類的服務(wù)進(jìn)行協(xié)同作業(yè)。 ?


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)