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

如何移除Ansible Play Recap中的失败项以避免Jenkins任务失败?

解决Ansible Playbook间歇性失败导致Jenkins任务终止的问题

绝对有办法处理这种情况!我来给你几个实用的方案,从精准控制任务失败逻辑到全局适配Jenkins流水线都覆盖到了:

方案1:忽略特定任务的间歇性失败(最推荐)

如果只有个别任务会间歇性出问题,直接在这些任务里添加失败忽略配置,这样即使任务失败,Ansible也不会把主机标记为failed:

- name: 执行容易间歇性失败的任务
  command: your-flaky-command-here
  ignore_errors: yes  # 无条件忽略该任务的失败

要是想更精准(只忽略特定的间歇性错误,保留真正的致命错误),可以用failed_when自定义失败判断逻辑:

- name: 执行容易间歇性失败的任务
  command: your-flaky-command-here
  register: task_result
  # 只有当错误不是我们预期的间歇性错误时,才标记任务失败
  failed_when: >
    task_result.rc != 0
    and "'致命错误关键词' in task_result.stderr"

方案2:全局允许部分主机失败

如果不确定哪台主机或哪个任务会出问题,可以在Play级别设置允许的失败主机比例,这样只要失败主机数不超过阈值,整个Playbook就不会返回失败退出码:

- name: 你的Playbook主Play
  hosts: all
  max_fail_percentage: 33  # 假设你有3台主机,允许1台失败(33%)
  tasks:
    # 你的任务列表...

注意:这个比例是按主机数量计算的,比如10台主机设置10%,就允许1台失败。

方案3:从Jenkins侧修改失败判断逻辑

如果不想改动Ansible代码,也可以直接在Jenkins任务里覆盖Ansible的退出码判断。Ansible的退出码规则是:

  • 0:所有任务执行成功
  • 1:发生致命错误(比如无法连接主机)
  • 2:存在失败任务但无致命错误

我们可以在Jenkins的Shell步骤里捕获退出码,只忽略2这个情况:

# 执行Ansible Playbook
ansible-playbook your-playbook.yml
# 捕获退出码
EXIT_CODE=$?
# 只忽略"存在失败任务"的情况,其他错误正常上报
if [ $EXIT_CODE -eq 2 ]; then
  exit 0  # 返回0让Jenkins认为任务成功
else
  exit $EXIT_CODE  # 其他错误保持原有退出码
fi

方案4:自定义Play Recap隐藏失败项(仅视觉掩盖)

如果只是想让Play Recap里不显示failed=1的标记,可以用Ansible的回调插件自定义输出。不过这个方法只是掩盖问题,不会改变Playbook的退出码,建议配合方案3一起用:

  1. 创建回调插件文件callback_plugins/hide_failed.py:
from ansible.plugins.callback import CallbackBase

class CallbackModule(CallbackBase):
    def v2_playbook_on_stats(self, stats):
        # 遍历所有主机,将失败计数重置为0
        for host in stats.processed.keys():
            if 'failures' in stats.stats[host]:
                stats.stats[host]['failures'] = 0
        # 调用原生的Recap输出逻辑
        super().v2_playbook_on_stats(stats)
  1. 在Playbook执行时指定回调插件目录:
ansible-playbook your-playbook.yml -e ansible_callback_plugins=./callback_plugins

最后提醒

优先用方案1或2,因为它们是从根源控制失败逻辑,而方案3、4更多是适配流水线需求的权宜之计。如果有时间,最好排查下间歇性失败的原因(比如网络波动、目标主机资源不足、命令本身的稳定性问题),从根本上解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:29:50