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

Jenkinsfile运行shell的find命令查找指定后缀文件报错如何解决

Jenkins流水线find命令转义错误解决方案

报错根因

  • Groovy作为Jenkins流水线的解析引擎,会先对"""包裹的多行字符串做转义处理:你写的单个反斜杠\会被Groovy识别为转义符直接消耗,不会传递到最终执行的shell脚本中,因此触发了unexpected char: '\'的编译错误。
  • 你写的find命令外层额外包裹了多余的双引号,也会导致shell执行时命令解析异常。

修复方案

你需要对shell中所有需要保留的反斜杠做双重转义(写为\\),同时去掉find命令外层的多余引号,修改后的完整stage代码如下:

stage("SCA Check"){
    node("default"){
        checkout scm
        
        conf.findAll { key, value -> key.contains("token.") }.each { key, value ->
            tokens << string(credentialsId: value, variable: key.replace('token.',''))
        }
        
        withEnv(vars) {
            withCredentials(tokens){
                dir(dirpath) {
                    dir(AppName) {
                        git url: gitURL,
                            credentialsId: 'bitbucket-https-url-rdonly',
                            branch: branchName
                    }  
                    sh """#!/bin/bash
                    set
                    echo '${scaInfo}'
                    python --version
                    cp Action.py '${AppName}' && cd '${AppName}' && mkdir -p scan
                    find . -regex '.*\\.\\(sql\\|conf\\|py\\|csv\\|coveragerc\\|css\\|eot\\|etlconf\\|hql\\|html\\|idx\\|ini\\|js\\|json\\|log\\|map\\|md\\|pack\\|pdf\\|sample\\|sh\\|svg\\|ttf\\|txt\\|woff\\|woff2\\)$' -exec cp {} scan/ \\;
                    echo find
                    cd scan && zip scan.zip * && mv scan.zip .. && cd ..
                    python Action.py '${scaInfo}'
                    """
                } 
            }
        } 
    }
}

可选优化说明

如果你的项目不同目录下存在重名的指定后缀文件,直接拷贝到scan目录会出现覆盖问题,可以调整find命令保留目录结构,例如使用cp --parents {} scan/,这样拷贝时会自动在scan目录下创建和原路径一致的目录结构,避免文件覆盖。

内容的提问来源于stack exchange,提问作者Simply Anks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:00