GitHub Actions部署时为什么构建产物没传到服务器?

开发者春凤 阅读 13

我用 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?但日志里又没报错……

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
极客心虹
问题很可能出在 dist/* 这个写法上。用 glob pattern 的话,如果目录下没有匹配的文件,scp-action 干脆就不传了,而且不会报错。

改成直接写目录名试试:

- 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"
strip_components: 1


strip_components: 1 会把 dist 这层目录去掉,直接把里面的内容放到目标目录。

另外建议在 build 步骤后加个检查,确认 dist 确实生成了:

- name: Build
run: npm run build

- name: Verify build
run: ls -la dist/


这样如果 build 没成功或者 dist 是空的,Action 会直接 fail 掉,你能看到问题在哪。

还有个可能的坑:如果你是第一次部署,目标目录 /var/www/html 必须先手动创建好,不然 scp 也会出问题。
点赞
2026-03-17 15:10