You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions中发送Ansible Playbook的Debug消息至Slack

如何在GitHub Actions中把Ansible Playbook的Debug输出发送到Slack

要把Playbook中debug模块输出的成功百分比、失败主机列表等信息同步到Slack,需要分三步实现:捕获Ansible输出、在Actions中读取内容、自定义Slack消息。

1. 修改Ansible Playbook,将结果写入本地文件

在现有Playbook中,先通过set_fact保存计算结果,再将内容写入GitHub Actions运行环境的本地文件,方便后续读取:

- hosts: platform_linux:!skipped_group
  gather_facts: yes
  become: yes
  tasks:
    - name: Ping Linux host
      ansible.builtin.ping:

    - name: Calculate host status metrics
      set_fact:
        success_percent: "{{ 100 - ((ansible_play_hosts|length)/(ansible_play_hosts_all|length))*100 | round }}"
        failed_hosts: "{{ ansible_play_hosts_all | difference(ansible_play_hosts) }}"

    - name: Write results to local file
      copy:
        content: |
          Success percentage for Linux is {{ success_percent }}
          The Linux hosts that failed are {{ failed_hosts | default('None') }}
        dest: ./ansible_host_results.txt
      delegate_to: localhost

delegate_to: localhost确保文件生成在GitHub Actions的运行容器中,而非远程目标主机。

2. 在GitHub Actions的base.yml中读取结果文件

在执行Ansible Playbook的步骤之后,添加读取文件内容的步骤,将内容存入步骤输出变量:

- name: Execute Ansible Playbook
        # 替换为你实际运行Playbook的命令,比如带inventory参数的ansible-playbook命令
        run: ansible-playbook -i inventory/${{ inputs.ou_env }} ${{ inputs.playbook }}.yml

      - name: Read Ansible host results
        id: ansible_results
        run: |
          RESULTS_CONTENT=$(cat ./ansible_host_results.txt)
          echo "content<<EOF" >> $GITHUB_OUTPUT
          echo "$RESULTS_CONTENT" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

通过id: ansible_results标记步骤,后续可通过steps.ansible_results.outputs.content获取文件内容。

3. 自定义Slack通知内容

替换原有的Slack通知步骤,加入读取到的Ansible结果内容。以下提供两种方案:

方案一:使用slackapi/slack-github-action(更灵活)

- name: Send Slack notification
        uses: slackapi/slack-github-action@v1.24.0
        with:
          slack-webhook-url: ${{ secrets.slack_webhook }}
          slack-message: |
            Ansible任务状态: ${{ job.status }}
            ---
            主机检测详情:
            ${{ steps.ansible_results.outputs.content }}
        if: always()

方案二:继续使用act10ns/slack(兼容原有配置)

- name: Send slack notification
        uses: act10ns/slack@v1.6.0
        with: 
          webhook-url: ${{ secrets.slack_webhook }}
          status: ${{ job.status }}
          custom-text: |
            主机检测详情:
            ${{ steps.ansible_results.outputs.content }}
        if: always()

注意事项

  • 确保文件路径和Playbook中定义的一致,避免读取失败。
  • failed_hosts | default('None')用于处理无失败主机的场景,避免输出空内容。

内容的提问来源于stack exchange,提问作者Vinita Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:33:19