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

Github Actions部署Java应用提示JAR文件不存在问题排查

问题:Github Actions部署阶段提示JAR文件不存在

我正在为Java应用搭建基于Github Actions的CI/CD流水线,分为构建和部署两个任务:

构建任务配置

build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2
        

      - name: Set up JDK 17
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: 17
          cache: 'maven'

      - name: Build and Package
        run: mvn clean package

部署任务配置

deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
      - name: Configure SSH
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H ${{ secrets.VM_HOST }} >> ~/.ssh/known_hosts

      - name: Copy JAR to VM
        run: scp -i ~/.ssh/id_rsa $GITHUB_WORKSPACE/target/flexipages-backend-0.0.1-SNAPSHOT.jar ${{ secrets.VM_USERNAME }}@${{ secrets.VM_HOST }}:/root/artifact2
      # - name: SSH into VM and Restart App
      #   run: |
      #     ssh -i ~/.ssh/id_rsa ${{ secrets.VM_USERNAME }}@${{ secrets.VM_HOST }} 'cd /root/artifact && java -jar flexipages-backend-0.0.1-SNAPSHOT.jar'

错误日志

Run scp -i ~/.ssh/id_rsa $GITHUB_WORKSPACE/target/flexipages-backend-0.0.1-SNAPSHOT.jar ***@***:/***/artifact2
  scp -i ~/.ssh/id_rsa $GITHUB_WORKSPACE/target/flexipages-backend-0.0.1-SNAPSHOT.jar ***@***:/***/artifact2
  shell: /usr/bin/bash -e {0}
/home/runner/work/FlexiPages-backend/FlexiPages-backend/target/flexipages-backend-0.0.1-SNAPSHOT.jar: No such file or directory
Error: Process completed with exit code 1.

调试时已在构建任务中确认JAR文件生成,但部署阶段仍报错,请问遗漏了什么配置?


解决方案

核心问题是Github Actions的不同Job之间默认不共享文件系统,构建Job生成的JAR仅存在于自身的Runner环境中,部署Job无法直接访问。需要通过「上传构件+下载构件」的方式在Job间传递文件:

步骤1:在构建任务中添加上传构件动作

修改build Job,在编译打包步骤后添加JAR上传:

build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2
        

      - name: Set up JDK 17
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: 17
          cache: 'maven'

      - name: Build and Package
        run: mvn clean package

      # 新增:上传编译好的JAR作为构件
      - name: Upload Build Artifact
        uses: actions/upload-artifact@v3
        with:
          name: java-app-jar
          path: target/flexipages-backend-0.0.1-SNAPSHOT.jar

步骤2:在部署任务中添加下载构件动作

修改deploy Job,在SSH配置步骤前添加JAR下载:

deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
      # 新增:下载构建阶段上传的JAR构件
      - name: Download Build Artifact
        uses: actions/download-artifact@v3
        with:
          name: java-app-jar
          path: target/ # 将JAR下载到target目录,和构建阶段路径保持一致

      - name: Configure SSH
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H ${{ secrets.VM_HOST }} >> ~/.ssh/known_hosts

      - name: Copy JAR to VM
        run: scp -i ~/.ssh/id_rsa $GITHUB_WORKSPACE/target/flexipages-backend-0.0.1-SNAPSHOT.jar ${{ secrets.VM_USERNAME }}@${{ secrets.VM_HOST }}:/root/artifact2

额外注意事项

  • 上传和下载的name参数必须一致(示例中均为java-app-jar),否则无法匹配构件
  • 如果JAR文件名随版本变动,可改用通配符匹配路径,比如path: target/*.jar,避免硬编码文件名
  • 构件在Github Actions中默认保留90天,足够完成部署流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:13:24