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

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
    '''
    
  • 解决:调整目录权限(避免过度开放权限):
    sh 'chmod -R 755 cws/ReportRepo/th.cws/thub'
    
    或修改目录所有者为Jenkins用户:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:27:35