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

Jenkins构建Docker镜像报ADD failed/无目录错误 命令行构建正常

报错根因

ADD failed: no source files were specified 报错的核心触发原因是Docker构建上下文路径与Maven打包产物的实际存储路径不匹配。
你在本地命令行能正常构建,是因为操作时大概率先进入了scheduler目录再执行docker build命令,路径逻辑自洽;但Jenkins流水线的执行路径和你本地操作不一致:

  • Jenkins拉取代码后,默认工作目录是仓库根目录,执行mvn -f scheduler/pom.xml package命令时,生成的jar包会存放在scheduler/target路径下,而非工作区根目录的target路径
  • 你写的docker.build("phelumiess/demo","-f scheduler/Dockerfile .")命令里,最后一个.指定Docker构建上下文为仓库根目录,此时Docker会按照Dockerfile的配置,去根目录下查找target/birthday-scheduler*.jar文件,根目录下不存在对应路径,自然找不到源文件触发报错。
修复方案

推荐优先用第一种方案,改动量最小,和你本地能跑通的逻辑完全对齐。

  • 方案1:调整Docker构建上下文路径
    不需要修改Dockerfile内容,只需要把镜像构建阶段的docker.build命令调整上下文路径即可,将原代码:

    def  dockerImage=docker.build("phelumiess/demo","-f scheduler/Dockerfile .")
    

    替换为:

    def dockerImage = docker.build("phelumiess/demo", "-f scheduler/Dockerfile scheduler")
    

    修改后Docker会以scheduler目录作为构建上下文,Dockerfile中配置的target/birthday-scheduler*.jar路径会正确匹配到scheduler/target下的jar包,构建即可正常执行。

  • 方案2:调整路径配置适配根目录构建上下文
    如果你需要保留构建上下文为仓库根目录的配置,需要同步修改两处:

    1. 调整Maven打包步骤的执行目录,修改Build jar阶段的执行逻辑:
    stage('Build jar') {
        steps {
            dir('scheduler') {
                sh "mvn package -DskipTests -X"
            }
            echo 'Build jar Completed' 
        }
    }
    
    1. 修改Dockerfile内的ADD路径,匹配根目录上下文下的jar包位置:
    FROM openjdk:8-jdk-alpine 
    EXPOSE 8080
    ADD scheduler/target/birthday-scheduler*.jar birthday-scheduler.jar
    ENTRYPOINT ["java","-jar","/birthday-scheduler.jar" ]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:06:39