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

Github Actions CI/CD工作流无法找到构建目录问题求助

Github Actions scp-action 提示“tar: empty archive”问题解决

问题背景

首次搭建Github Actions CI/CD工作流,在Runner上完成应用构建后,尝试通过appleboy/scp-action将dist目录构建产物和docker-compose.prod.yml复制到VPS并启动容器。构建步骤执行正常,ls -R ./dist显示目录内容完整,但scp-action执行时始终提示tar: empty archive,即使将build和deploy合并为单个job,问题仍未解决。

核心原因

  1. 通配符解析问题:scp-action的source参数中使用./dist/*时,通配符*未被工具正确解析,导致无法匹配到dist目录下的文件,最终生成空的tar归档包。
  2. 旧版本工具bug:使用的appleboy/scp-action@v0.1.7版本较旧,存在路径解析的兼容性问题。

解决方案

1. 修改source路径写法

直接指定dist目录(而非通配符),让scp-action完整复制整个目录:

- name: Deploy to VPS
  uses: appleboy/scp-action@v0.1.7
  with:
    HOST: ${{ secrets.HOST }}
    USERNAME: ${{ secrets.USERNAME }}
    PORT: ${{ secrets.PORT }}
    KEY: ${{ secrets.SSH_KEY }}
    source: |
      ./dist
      ./docker-compose.prod.yml
    target: "/usr/src/app"

如果需要将dist目录内的文件直接放到VPS的/usr/src/app根目录(而非/usr/src/app/dist),可以给路径加上斜杠:

source: |
  ./dist/
  ./docker-compose.prod.yml

2. 升级scp-action到最新版本

旧版本工具存在路径解析bug,升级到最新稳定版可解决该问题:

uses: appleboy/scp-action@v0.1.8

3. 补充:修复远程脚本的.env写入问题

原远程脚本中使用>写入.env会覆盖之前的内容,导致最终只有最后一行变量生效,需改为>>追加,同时正确引用Github Secrets:

# Set environment variables stored in Github secrets
echo "VITE_BASE_URL=${{ secrets.VITE_BASE_URL }}" >> .env
echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
echo "NODE_PORT=${{ secrets.NODE_PORT }}" >> .env
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
echo "REFRESH_SECRET_KEY=${{ secrets.REFRESH_SECRET_KEY }}" >> .env

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:12:16