GitHub Actions无法构建Spring Boot应用Docker镜像求助
问题分析
错误提示找不到target/htmx-demo-0.0.1-SNAPSHOT.jar,核心原因是:本地构建时你会先执行Maven/Gradle打包命令生成target目录,但GitHub Actions的运行环境是全新的,仅拉取了代码仓库内容,没有执行构建步骤生成jar包,导致Docker构建时找不到目标文件。
解决方案
在GitHub Actions工作流中添加Java构建步骤,先生成jar包再执行Docker构建:
针对Maven项目
- 引入
actions/setup-java配置JDK环境 - 执行
mvn clean package -DskipTests命令打包(跳过测试可加快构建速度)
针对Gradle项目
- 同样引入
actions/setup-java配置JDK环境 - 执行
./gradlew clean build -x test命令打包(-x test参数跳过测试)
优化建议
Dockerfile中硬编码了jar包版本号,后续版本迭代时需修改Dockerfile,建议用通配符简化:
COPY target/*.jar $APP_HOME/htmx-demo.jar
这样不管target目录下生成的jar包版本号是什么,都会被复制并重命名为htmx-demo.jar,无需修改Dockerfile。
完整工作流示例
Maven项目版
name: Docker Image CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 23 uses: actions/setup-java@v4 with: java-version: '23' distribution: 'temurin' cache: maven # 缓存Maven依赖,加速后续构建 - name: Package Spring Boot app with Maven run: mvn clean package -DskipTests - name: Build Docker image run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
Gradle项目版
name: Docker Image CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 23 uses: actions/setup-java@v4 with: java-version: '23' distribution: 'temurin' cache: gradle # 缓存Gradle依赖,加速后续构建 - name: Package Spring Boot app with Gradle run: ./gradlew clean build -x test - name: Build Docker image run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
内容的提问来源于stack exchange,提问作者tjholmes66
相关产品推荐
相关产品推荐

