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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:15:02