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
相关产品推荐
相关产品推荐

