Slack 是當前火紅的線上通訊服務,在台灣業界 [^1] 也有許多開發團隊在使用。除了可以用它與內部成員溝通外,透過發送通知訊息 (notification)、聊天機器人 (Chatbot) 等的資訊整合後,更發展出 ChatOps [^2] 一詞來形容這樣子的生態系。這次就讓凍仁分享一下 Ansible 整合 Slack 的小小心得。
▲ 上圖為 Ansible 發送 notification 到 Slack 的範例。
slack module 是用來發送訊息到 Slack 上的通知模組 (notification modules),並藉由整合 Slack Incoming Webhook 功能進行使用。
撰寫發送 notification 到 Slack 的 Playbook:請依步驟 2 取得的參數設定 slack_domain
, slack_token
和 slack_channel
等變數,若要發送 notification 到某個 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: "{{ slack_domain }}"
token: "{{ slack_token }}"
username: "ansible"
channel: "{{ slack_channel }}"
color: "normal"
msg: "Send a notification with Ansible !"
# vim: ft=ansible :
取得 Slack 的相關設定。
登入 Slack 後,進入 Manage (管理) 介面。
進入 Custom Integrations (自訂整合),並找到 Incoming WebHooks。
點擊 Add Configuration 新增一個 WebHooks 給 Ansible 使用。
新增好 WebHooks 後的畫面如下。
將頁面往下捲至 Integration Settings (整合設定) 。
設定 Post to Channel (預設發送頻道) :可先用 @username 進行測試。
取得 Webhook URL:以底下的 URL 為例,其中的 CCCCCCCCCCCCCCCCCCCCCCCC
即為 slack module 中的 token
,也就是 send_notification_to_slack.yml Playbook 裡所缺少的 slack_token
!
https://hooks.slack.com/services/AAAAAAAAA/BBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC
最後上傳一張 Ansible 的圖示以利辨識。
執行 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。
現在我們的成功把 Ansible 和 Slack 整合好了!
順帶一提,若不想在每個 Playbooks 都重複宣告
slack_domain
,slack_token
和slack_channel
等變數,可使用「14. 怎麼使用 Ansible 的 Template
系統?」一章提到的vars_files
進行改寫。
讓 Ansible 發送 notifications 到 Slack 後,我們除了可以提醒自己有哪些 Playbooks 完成外,更可便於其它成員追蹤相關任務的進度和執行狀態等。
[^1]: 凍仁之前任職的 commandp Inc. 即為 Slack 的商業用戶之一。
[^2]: ChatOps 一詞凍仁曾在「03. 怎麼部署 Ansible 環境?」一章有提過,相信已有不少公司會藉由 Slack 這類的服務進行協同作業。
先寫個 30%,接下來洗個澡再奮鬥了,話說台北怎麼可以這麼冷啊!
是該來寫 Day17 的文章了!我們晚點見!XD