GitHub Actions部署时为什么构建产物没传到服务器?
我用 GitHub Actions 自动部署一个 Vue 项目到自己的 VPS,本地 build 没问题,但 Action 跑完后发现服务器上只有空文件夹。我用的是 scp 把 dist 目录传过去,但好像根本没传成功?
这是我的 workflow 配置:
- name: Deploy to server
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
source: "dist/*"
target: "/var/www/html"
是不是 source 路径写错了?或者 build 步骤根本没生成 dist?但日志里又没报错……
另外要确认 build 步骤确实生成了 dist 目录。可以在 workflow 里加个步骤打印一下文件列表:
如果这步没看到预期的文件,说明构建有问题。记得检查 package.json 里的 build 命令是否正确配置了 outputDir 参数。
还有个小细节,scp-action 版本有点旧了,建议升级到最新版看看有没有修复相关问题。我之前也遇到过类似情况,老版本有时处理目录传输不太稳定。
总的来说就是先确认构建正常,再调整 scp 配置,最后考虑升级工具。这些小坑我都踩过,折腾半天才发现原来是路径写得不严谨。
dist/*这个写法上。用 glob pattern 的话,如果目录下没有匹配的文件,scp-action 干脆就不传了,而且不会报错。改成直接写目录名试试:
strip_components: 1会把 dist 这层目录去掉,直接把里面的内容放到目标目录。另外建议在 build 步骤后加个检查,确认 dist 确实生成了:
这样如果 build 没成功或者 dist 是空的,Action 会直接 fail 掉,你能看到问题在哪。
还有个可能的坑:如果你是第一次部署,目标目录
/var/www/html必须先手动创建好,不然 scp 也会出问题。