Jenkins流水线执行共享库Bash脚本后莫名报错求助
Jenkins共享库Bash脚本执行
exit 0后出现"command not found"异常排查 可能的原因及排查步骤
1. 脚本shebang行缺失或错误
检查共享库脚本第一行是否为标准Bash shebang:
#!/bin/bash
若缺失或使用#!/bin/sh,脚本中Bash专属语法可能触发兼容性问题,导致错误指向Jenkins自动生成的wrapper脚本第2行(而非你的脚本)。
2. Jenkins sh步骤的执行模式干扰
如果使用带返回状态的执行模式(如sh returnStatus: true, script: './your-script.sh'),脚本exit 0后的Jenkins内部处理可能出现异常。尝试改为直接执行:
sh './your-script.sh'
同时排查是否在脚本中嵌套了子shell,导致exit意外终止了父级执行上下文。
3. 脚本换行符隐性问题
即便od -c检查显示正常,仍需确认脚本是否残留Windows换行符(\r\n)。Jenkins写入文件时可能出现格式兼容问题,导致exit后的隐藏字符被误识别为命令。可在writeFile后添加格式转换:
writeFile file: 'your-script.sh', text: libraryResource('path/to/script.sh') sh 'dos2unix your-script.sh' sh 'chmod +x your-script.sh'
4. 环境变量PATH被污染
检查执行脚本前后的PATH变量是否被修改,导致Jenkins后续清理命令找不到依赖工具。可添加打印对比:
sh 'echo $PATH' sh './your-script.sh' sh 'echo $PATH'
5. Jenkins临时wrapper脚本错误
Jenkins执行sh步骤会生成临时wrapper脚本,报错指向的第2行大概率是这个wrapper的内容。开启Jenkins流水线调试日志(系统设置中启用),查看生成的wrapper脚本内容,确认是否在你的脚本exit后存在无效命令。
内容的提问来源于stack exchange,提问作者David M. Karr
相关产品推荐
相关产品推荐

