Rundeck多步骤内核补丁任务:单节点失败致其他节点任务停滞解决方案咨询
针对你遇到的问题,核心是要让单个节点的检查失败只终止自身后续任务,而非阻断整个作业在其他节点的执行,以下是几个实用方案:
调整检查步骤的错误处理规则
别直接返回exit 1触发全局失败,而是把检查步骤的「On Failure」设置为Continue (Ignore),然后在检查脚本里做标记:如果服务器已达目标版本,就输出SKIP_NODE=true到Rundeck的作业上下文变量里(比如echo "SKIP_NODE=true" >> $RD_JOB_DETAILS)。后续所有补丁步骤都添加条件判断:${data.SKIP_NODE} != true,这样达标节点会自动跳过后续操作,其他节点不受影响。关闭全局Fail Fast开关
在作业配置的「Node Execution」板块,把「Fail Fast」设为No(默认可能是Yes,这会导致单个节点失败就终止全作业)。同时确保「Thread Count」设置足够大,支持多节点并行执行,避免出现等待阻塞的情况。用预过滤脚本提前筛选节点
把版本检查改成节点预过滤脚本,直接在作业的「Nodes」配置里选「Filter」类型为「Script」,脚本逻辑是只输出未达标的节点名称。这样Rundeck会直接跳过已达标节点,根本不会在这些节点上启动任务,从根源避免干扰其他节点。
示例脚本:TARGET_VERSION="你的目标内核版本" CURRENT_VERSION=$(uname -r) # 只返回版本不匹配的节点 [ "$CURRENT_VERSION" != "$TARGET_VERSION" ] && echo "$RD_NODE_NAME"给节点步骤设置独立错误处理
将检查步骤设为独立的「Node Step」,然后在该步骤的「Error Handling」里选择Skip Remaining Steps for Node,而不是默认的「Fail Entire Job」。这样当该节点检查返回exit 1时,只会跳过这个节点的后续步骤,其他节点的任务会正常执行。
内容的提问来源于stack exchange,提问作者Emma

