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,问题仍未解决。
核心原因
- 通配符解析问题:scp-action的
source参数中使用./dist/*时,通配符*未被工具正确解析,导致无法匹配到dist目录下的文件,最终生成空的tar归档包。 - 旧版本工具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
相关产品推荐
相关产品推荐

