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

Github Actions Artifact构建产物无法复制至Nginx目录求助

问题原因

你猜对了,核心问题是:appleboy/ssh-action的script代码块是在你的目标服务器(DROPLET)上执行的,而${{steps.download.outputs.download-path}}是GitHub Runner主机上的本地路径,目标服务器的文件系统里根本不存在这个路径,所以cp命令找不到文件。

解决方案

用scp直接将Runner上的构建产物传到目标服务器,推荐使用和ssh-action同作者的appleboy/scp-action,配合原有的ssh命令完成后续部署操作。

修改后的deploy jobs配置如下:

deploy:
  needs: build-clientside
  runs-on: ubuntu-latest
  steps:
    - name: Download build artifact
      id: download
      uses: actions/download-artifact@v2
      with:
        name: client-build
        path: ${{ github.workspace }}/client/build/

    - name: Upload build files to target server
      uses: appleboy/scp-action@master
      with:
        host: ${{ secrets.DROPLET_URL }}
        key: ${{ secrets.DROPLET_PEM_KEY }}
        username: root
        source: "${{ github.workspace }}/client/build/"
        target: "/tmp/"

    - name: Deployment
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.DROPLET_URL }}
        key: ${{ secrets.DROPLET_PEM_KEY }}
        username: root
        script: |
          rm -rf /var/www/build
          mv /tmp/build /var/www/
          systemctl reload nginx 
          cd /root/investing 
          git reset --hard 
          git checkout main 
          git pull 
          docker-compose down --rmi local 
          docker-compose pull 
          docker-compose up -d
关键修改说明
  • 新增appleboy/scp-action步骤:将Runner上下载好的构建产物${{ github.workspace }}/client/build/上传到目标服务器的临时目录/tmp/
  • 在ssh的script里,把原来的cp命令改成mv /tmp/build /var/www/:scp上传后,/tmp/下会出现build目录,直接移动到目标位置即可
  • 保持原有ssh里的其他部署命令不变
额外验证(可选)

如果想确认上传后的文件位置,可以在ssh的script开头加一句ls -la /tmp/,查看临时目录里的文件情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:24:56