返回介绍

Ansible 如何发送 notification 到 Slack?

发布于 2024-10-04 19:05:51 字数 9017 浏览 0 评论 0 收藏 0

現代 IT 人一定要知道的 Ansible 自動化組態技巧

16. Ansible 如何發送 notification 到 Slack?

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

automate_with_ansible_practice-21.jpg ▲ 上圖為 Ansible 發送 notification 到 Slack 的範例。

slack module 是什麼?

slack module 是用來發送訊息到 Slack 上的通知模組 (notification modules),並藉由整合 Slack Incoming Webhook 功能進行使用。

Ansible 怎麼整合 Slack?

  1. 撰寫發送 notification 到 Slack 的 Playbook:請依步驟 2 取得的參數設定 slack_domain, slack_tokenslack_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=yaml.ansible :
    

    註:rawendraw 是為了相容 GitBook 所增加的語法,您可能會在某平台上看到它,請忽略之。

  2. 取得 Slack 的相關設定。

    1. 登入 Slack 後,進入 Manage (管理) 介面。

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

    2. 進入 Custom Integrations (自訂整合),並找到 Incoming WebHooks。

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

    3. 點擊 Add Configuration 新增一個 WebHooks 給 Ansible 使用。

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

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

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

    5. 將頁面往下捲至 Integration Settings (整合設定)

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

    6. 設定 Post to Channel (預設發送頻道) :可先用 @username 進行測試。

    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 的圖示以利辨識。

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

  3. 執行 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. 現在我們的成功把 Ansible 和 Slack 整合好了!

順帶一提,若不想在每個 Playbooks 都重複宣告 slack_domain, slack_tokenslack_channel 等變數,可使用「14. 怎麼使用 Ansible 的 Template 系統?」一章提到的 vars_files 進行改寫。

後語

讓 Ansible 發送 notifications 到 Slack 後,我們除了可以提醒自己有哪些 Playbooks 完成外,更可便於其它成員追蹤相關任務的進度和執行狀態等。

相關連結

1. 凍仁之前任職的 commandp Inc. 即為 Slack 的商業用戶之一。
2. ChatOps 一詞凍仁曾在「03. 怎麼部署 Ansible 環境?」一章有提過,相信已有不少公司會藉由 Slack 這類的服務進行協同作業。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文