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 的小小心得。
▲ 上圖為 Ansible 發(fā)送 notification 到 Slack 的范例。
slack module 是用來發(fā)送訊息到 Slack 上的通知模組 (notification modules),并借由整合 Slack Incoming Webhook 功能進(jìn)行使用。
撰寫發(fā)送 notification 到 Slack 的 Playbook:請(qǐng)依步驟 2 取得的參數(shù)設(shè)定 slack_domain
, slack_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 :
取得 Slack 的相關(guān)設(shè)定。
登入 Slack 后,進(jìn)入 Mamage (管理) 界面。
進(jìn)入 Custom Integrations (自定整合),并找到 Incoming WebHooks。
點(diǎn)擊 Add Configuration 新增一個(gè) WebHooks 給 Ansible 使用。
新增好 WebHooks 后的畫面如下。
將頁(yè)面往下卷至 Integration Settings (整合設(shè)定) 。
設(shè)定 Post to Channel (預(yù)設(shè)發(fā)送頻道) :可先用 @username 進(jìn)行測(cè)試。
取得 Webhook URL:以底下的 URL 為例,其中的 CCCCCCCCCCCCCCCCCCCCCCCC
即為 slack module 中的 token
,也就是 send_notification_to_slack.yml Playbook 里所缺少的 slack_token
!
https://hooks.slack.com/services/AAAAAAAAA/BBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC
最后上傳一張 Ansible 的圖示以利辨識(shí)。
執(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
在 Slack 接收從 Ansible 送出的 notification。
現(xiàn)在我們的成功把 Ansible 和 Slack 整合好了!
順帶一提,若不想在每個(gè) Playbooks 都重復(fù)宣告
slack_domain
,slack_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)等。
1. 凍仁之前任職的 commandp Inc. 即為 Slack 的商業(yè)用戶之一。 ?
2. ChatOps 一詞凍仁曾在「怎么部署 Ansible 環(huán)境?」一章有提過,相信已有不少公司會(huì)借由 Slack 這類的服務(wù)進(jìn)行協(xié)同作業(yè)。 ?
更多建議: