Jenkins seed job执行DSL脚本提示groovy文件不存在于工作区求助
Jenkins Seed Job DSL读取工作区文件不存在问题排查方案
- 先确认工作区实际目录结构
在seed job的构建步骤最前端新增shell(Linux环境)或批处理(Windows环境)步骤,打印当前工作路径和全目录结构:
Linux命令:pwd && ls -R
Windows命令:cd && dir /s
执行一次构建查看输出,确认上传的src/test/UnixDSLJob.groovy是否真的存在于当前工作区的对应路径下,大概率会发现文件实际存放路径和你写的路径不一致,比如上传的文件被放在了自动生成的子目录、或者没有自动创建src/test层级目录。 - 确认文件上传规则
如果你是用Jenkins的「文件参数」功能上传的脚本,文件参数默认会把上传的文件直接放在工作区根目录,文件名为你设置的参数名,不会自动创建src/test层级目录。你需要在读取文件前新增步骤,手动创建对应目录并移动文件到目标路径,示例命令:mkdir -p src/test && mv 你设置的文件参数名 src/test/UnixDSLJob.groovy - 确认执行上下文和路径写法
readFileFromWorkspace是Job DSL插件的内置方法,读取的是seed job自身的工作区;readFile是Pipeline的内置方法,需要运行在对应agent节点上,如果你的Pipeline设置了agent none,或者DSL步骤运行的节点和文件上传的节点不一致,就会找不到文件。- 避免相对路径的根目录偏移问题,建议用工作区环境变量拼接绝对路径读取,写法示例:
readFile("${WORKSPACE}/src/test/UnixDSLJob.groovy")
- 检查文件读取权限
确认Jenkins运行用户对目标文件有可读权限,可以在shell步骤中执行ls -l src/test/UnixDSLJob.groovy查看权限配置,权限不足时执行chmod +r src/test/UnixDSLJob.groovy添加读取权限。
调整后完整配置示例
pipeline { agent any parameters { // 假设你设置的文件参数名为dsl_script file(name: 'dsl_script', description: '上传UnixDSLJob.groovy脚本') } stages { stage('预处理文件') { steps { sh 'mkdir -p src/test && mv ${dsl_script} src/test/UnixDSLJob.groovy' // 确认文件存在 sh 'ls -l src/test/UnixDSLJob.groovy' } } stage('执行DSL配置') { steps { dsl{ text(readFile("${WORKSPACE}/src/test/UnixDSLJob.groovy")) ignoreExisting() removeAction('DELETE') removeViewAction('DELETE') } } } } }
内容的提问来源于stack exchange,提问作者user8810618
相关产品推荐
相关产品推荐

