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

GitHub Action使用Maven构建JAR时Dockerfile找不到target目录JAR问题求助

故障根因

报错核心是Docker构建过程无法读取到GitHub Runner上Maven构建生成的target目录及对应JAR包,触发原因有两个:

  1. docker/build-push-action未显式指定构建上下文,导致Docker构建时没有加载Runner当前工作目录下刚生成的target目录
  2. Maven打包默认会执行测试用例,测试失败时会终止构建,不会生成target目录和JAR包

解决方案

方案1:复用现有工作流的Maven缓存(构建速度更快)

  1. 调整Maven构建命令,跳过测试避免构建中断
    将Build with Maven步骤的运行命令修改为:
    mvn clean package -DskipTests
    
  2. 补充docker/build-push-action的上下文配置
    修正后的Build and push to local registry步骤配置如下:
    - name: Build and push to local registry
      uses: docker/build-push-action@v2
      with:
        context: .
        file: ./Dockerfile
        push: true
        tags: bi.nti.co.id/vqube/neural_bi_vqube:latest
    
  3. 可选:添加JAR包校验步骤
    在Maven构建后、Docker构建前添加校验步骤,确认JAR包已生成且名称匹配:
    - name: Verify JAR exists
      run: |
        ls -la target/
        ls target/visual_query_builder-0.0.1-SNAPSHOT.jar
    

方案2:Docker多阶段构建(环境一致性更高)

直接修改Dockerfile,将JAR构建逻辑集成到镜像构建流程中,彻底避免工作流和Docker构建上下文不一致的问题,修正后的Dockerfile如下:

# 构建阶段:完成依赖下载和JAR打包
FROM maven:3.8.6-openjdk-11-slim AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline -DskipTests
COPY src ./src
RUN mvn clean package -DskipTests

# 运行阶段:仅保留运行所需的JRE环境和JAR包
FROM openjdk:11-jdk-slim
EXPOSE 8888
WORKDIR /
COPY --from=builder /build/target/visual_query_builder-0.0.1-SNAPSHOT.jar .
ENTRYPOINT ["java","-jar","/visual_query_builder-0.0.1-SNAPSHOT.jar"]

采用该方案可以直接删除工作流中JDK安装、Maven缓存、Maven构建相关步骤,所有构建逻辑都在Dockerfile内完成,不会受工作流环境变动影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:09