Jenkins Pipeline stage遍历目标目录子目录出现语法报错如何解决?
问题原因
你遇到的Expected a step报错是因为声明式Jenkins Pipeline的steps代码块仅支持直接调用Jenkins内置步骤,不允许直接编写原生Groovy逻辑(如变量定义、循环遍历),所有自定义代码必须包裹在script块中执行。
同时findFiles步骤依赖Jenkins的「Pipeline Utility Steps」插件,需要提前确认该插件已在你的Jenkins实例中安装。
正确代码示例
stage('Publish Libs') { when { branch productionBranch } steps { echo "Publish Libs" dir('dist/libs') { script { // 可添加onlyDirectories: true参数直接过滤出所有子目录,无需后续判断 def files = findFiles(onlyDirectories: true) files.each{ f -> echo "当前遍历的子目录:${f.name} " // 对每个子目录执行shell命令的示例:进入对应目录执行命令 dir(f.name) { sh '此处替换为你要执行的shell命令' } } } } } }
补充说明
findFiles的onlyDirectories: true参数可以直接返回当前路径下的所有子目录,无需额外判断目录属性,简化代码- 如果你需要更精细的目录过滤,可以新增
glob参数,比如findFiles(glob: '*-service', onlyDirectories: true)只会匹配名称以-service结尾的子目录 - shell步骤可以直接在
script块的循环内调用,和声明式Pipeline的原生sh步骤用法完全一致
内容的提问来源于stack exchange,提问作者mindparse
相关产品推荐
相关产品推荐

