如何对比两个Jenkins slave节点以排查其余节点缺失.sh文件的问题
Jenkins多节点.sh文件缺失问题排查方案
1 核对路径配置一致性
- 先在正常运行的节点上,给对应Jenkins任务加临时构建步骤,执行命令:
pwd && ls -la 你调用的.sh文件的路径,记录输出的工作目录绝对路径、文件的完整路径 - 在异常节点上执行相同命令,核对路径是否一致,大部分场景是不同节点的工作目录根配置不同,导致相对路径寻址失败
2 对比节点环境变量
- 正常节点执行命令导出全量环境变量:
printenv > normal_env.txt - 异常节点执行相同命令导出:
printenv > error_env.txt - 对比两个文件的差异,重点排查
PATH、WORKSPACE以及你自定义的和路径相关的环境变量,同时核对Jenkins节点管理页里两个节点的自定义变量配置是否有差异
3 核对脚本分发/拉取逻辑
- 如果.sh文件是通过代码库拉取到节点的:核对异常节点是否有权限拉取对应代码库,拉取的分支、提交版本是否和正常节点一致,是否配置了拉取过滤规则把.sh文件排除了
- 如果.sh文件是预先部署在节点本地的:核对正常节点上.sh文件的存放路径、执行权限,去异常节点对应路径下确认文件是否存在、是否有可执行权限(可执行权限检查命令:
ls -l 文件名.sh,输出中x位为执行权限标记)
4 核对任务节点分配规则
- 检查Jenkins任务的「限制项目运行节点」配置,是否有标签匹配规则,确认异常节点是否带对应标签
- 如果是pipeline任务,核对
node('标签名')部分的标签配置,是否只有正常节点匹配标签,导致脚本仅分发到该节点
快速对比差异的命令
替换命令中的
/path/to/script_parent_dir为你.sh文件所在的上级目录
# 正常节点执行,导出目录下所有sh文件的md5列表 find /path/to/script_parent_dir -type f -name "*.sh" -exec md5sum {} \; > normal_sh_list.txt # 异常节点执行,导出相同规则的sh文件md5列表 find /path/to/script_parent_dir -type f -name "*.sh" -exec md5sum {} \; > error_sh_list.txt # 对比两个列表,直接得到缺失、变更的sh文件 diff normal_sh_list.txt error_sh_list.txt
内容的提问来源于stack exchange,提问作者TASK27
相关产品推荐
相关产品推荐

