Jenkins流水线构建时cd目录权限拒绝问题排查请求
Jenkins流水线cd目录失败问题排查与解决
问题描述
Jenkins流水线执行时出现错误:
+ cd cws/ReportRepo/th.cws/thub/mod.cwscommon /var/lib/jenkins/workspace/mcn@2@tmp/durable-b82db53a/script.sh: 2: cd: can't cd to cws/ReportRepo/th.cws/thub/mod.cwscommon
可能原因及解决方法
1. 目标目录不存在
Git拉取的代码中没有该路径,或者拉取位置与预期不符。
- 排查步骤:在
Git checkout阶段后添加查看工作区结构的命令,确认目录是否存在:stage('Git checkout'){ steps{ script{ git branch: 'development', credentialsId: '...elided...' // 查看当前工作区文件结构 sh 'ls -la' // 搜索目标目录是否存在 sh 'find . -type d -name "mod.cwscommon"' } } } - 解决:如果目录不存在,检查Git仓库的代码结构是否与脚本中的路径匹配;确认Jenkins项目配置的Git仓库URL正确,代码已完整拉取到工作区。
2. Jenkins用户无目录访问权限
Jenkins运行用户(通常为jenkins用户)没有进入该目录的读/执行权限。
- 排查步骤:在cd命令前添加权限检查命令,确认权限归属:
sh ''' # 查看目录权限及所有者 ls -ld cws/ReportRepo/th.cws/thub/mod.cwscommon # 查看当前执行命令的用户 whoami ''' - 解决:调整目录权限(避免过度开放权限):
或修改目录所有者为Jenkins用户:sh 'chmod -R 755 cws/ReportRepo/th.cws/thub'sh 'chown -R jenkins:jenkins cws/ReportRepo/th.cws/thub'
3. 相对路径使用不当
脚本中的相对路径基于Jenkins工作区根目录,但实际代码结构与预期不符。
- 优化方案:使用Jenkins内置的
dir步骤替代shell的cd命令,逻辑更清晰且可靠:stage('gradle build'){ steps{ dir('cws/ReportRepo/th.cws/thub/mod.cwscommon') { sh './gradle clean build' sh './gradle publishToMavenLocal' } } }dir步骤会自动切换到指定目录,若目录不存在会直接抛出明确错误,便于快速定位问题。
额外建议
- 检查最后一个stage中的路径
cws-batch-api-ms/build/l,疑似笔误,应为build/libs,避免后续docker构建步骤出错。 - 多个重复的gradle构建步骤可考虑用循环或共享逻辑处理,减少代码冗余。
内容的提问来源于stack exchange,提问作者Visshnu Natarajan
相关产品推荐
相关产品推荐

