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

Jenkins Pipeline执行shell命令报错:command not found求助

解决Jenkins Pipeline中计算WAR文件md5sum的报错问题

错误原因分析

第一个Pipeline代码的问题

  1. 多sh步骤变量不共享:每个sh步骤是独立的shell进程,在第一个sh里定义的SUM变量,无法在第二个sh步骤中访问。
  2. 赋值语法错误:SUM=echo $(md5sum ${WORKSPACE}/ABC/XYZ/dist/ABC.war) 写法错误,多了冗余的echo,且shell会将md5sum的输出当作命令执行,导致command not found报错。

第二个尝试代码的问题

MDSUM= "$(echo $SUM | head -n1 | awk '{print $1;}')" 中等号后有空格,shell会把MDSUM识别为命令,后面的字符串作为参数,从而触发报错。

解决方案

方案1:在单个shell步骤中完成md5计算与输出

将所有相关shell命令合并到一个sh块中,确保变量在同一个进程内可用,同时修正语法错误:

stage('Build') {
    steps {
        withAnt(installation: 'ANT_1.9.9', jdk: 'Java_1.8.0_361') {
            sh 'ant -f ABC/XYZ/build.xml build'
        }
        sh '''
            #!/bin/bash
            # 直接将md5sum结果赋值给SUM,去掉冗余echo
            SUM=$(md5sum "${WORKSPACE}/ABC/XYZ/dist/ABC.war")
            echo "完整md5信息:$SUM"
            # 提取纯md5值,注意等号前后无空格
            MDSUM=$(echo "$SUM" | awk '{print $1}')
            echo "仅md5值:$MDSUM"
        '''
    }
    post {
        success {
            echo "build success"
        }
    }
}

方案2:将md5值保存为Jenkins Pipeline变量(供后续步骤使用)

如果需要把md5值传递给Pipeline的其他步骤,使用sh returnStdout: true捕获命令输出:

stage('Build') {
    steps {
        withAnt(installation: 'ANT_1.9.9', jdk: 'Java_1.8.0_361') {
            sh 'ant -f ABC/XYZ/build.xml build'
        }
        script {
            // 捕获md5值并去除多余空格换行
            def warMd5 = sh(
                script: 'md5sum "${WORKSPACE}/ABC/XYZ/dist/ABC.war" | awk \'{print $1}\'',
                returnStdout: true
            ).trim()
            echo "WAR文件md5值:${warMd5}"
            // 后续可使用warMd5变量执行归档、验证等操作
        }
    }
    post {
        success {
            echo "build success"
        }
    }
}

内容的提问来源于stack exchange,提问作者sai rohith naredla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:13:14