使用GitHub Actions部署React/TS代码至SiteGround服务器失败求助
React/TypeScript项目GitHub Actions FTP部署失败问题排查与解决
问题现象
使用GitHub Actions部署React/TypeScript项目时,npm安装依赖、构建步骤均正常执行,但进入FTP部署阶段报错,关键错误信息如下:
Wed Feb 14 01:28:55 UTC 2024: fatal: Not a Git project? Exiting... Error: The process '/usr/bin/git' failed with exit code 8
完整错误日志
/usr/bin/git ftp push --force --auto-init --verbose --syncroot=./ --user=*** --passwd=*** *** Wed Feb 14 01:28:55 UTC 2024: git-ftp version 1.6.0 running on Linux 13d0e8be6ce6 6.2.0-1019-azure #19~22.04.1-Ubuntu SMP Wed Jan 10 22:57:03 UTC 2024 x86_64 GNU/Linux Wed Feb 14 01:28:55 UTC 2024: Forced mode enabled. Wed Feb 14 01:28:55 UTC 2024: Auto init if needed. Wed Feb 14 01:28:55 UTC 2024: Using syncroot ./ if exists. Wed Feb 14 01:28:55 UTC 2024: Syncroot is './'. Wed Feb 14 01:28:55 UTC 2024: fatal: Not a Git project? Exiting... Error: The process '/usr/bin/git' failed with exit code 8 ✅ Deploy Complete
当前GitHub Actions配置片段
# 推送至"test"分支时触发流水线 on: push: branches: - test jobs: build_and_deploy: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v2 - name: 配置Node.js环境 uses: actions/setup-node@v2 with: node-version: '14.x' - name: 安装依赖 run: npm install --force - name: 构建站点 run: npm run build --force env: FTP_SERVER: ${{ secrets.FTP_SERVER_FRONT }} FTP_USERNAME: ${{ secrets.FTP_USERNAME_FRONT }} FTP_PASSWORD: ${{ secrets.FTP_PASSWORD_FRONT }} - name: 通过FTP部署至SiteGround uses: SamKirkland/FTP-Deploy-Action@3.1.1 with: ftp-server: ${{ secrets.FTP_SERVER_FRONT }} ftp-username: ${{ secrets.FTP_USERNAME_FRONT }} ftp-password: ${{ secrets.FTP_PASSWORD_FRONT }} local-dir: ./
原因分析
- 工具依赖Git环境:你使用的
SamKirkland/FTP-Deploy-Action@3.1.1底层基于git-ftp,该工具要求运行目录必须是Git仓库根目录才能正常工作。 - 部署目录配置错误:React项目
npm run build的产物默认输出到build目录,而你配置的local-dir: ./指向项目根目录,既不需要部署源码到服务器,也可能因构建过程中的文件变更导致Git仓库上下文异常。
解决方案
1. 修正部署目录为构建产物目录(推荐)
将部署的本地目录改为React构建产物所在的build目录:
- name: 通过FTP部署至SiteGround uses: SamKirkland/FTP-Deploy-Action@3.1.1 with: ftp-server: ${{ secrets.FTP_SERVER_FRONT }} ftp-username: ${{ secrets.FTP_USERNAME_FRONT }} ftp-password: ${{ secrets.FTP_PASSWORD_FRONT }} local-dir: ./build/ # 改为构建产物目录
2. 若必须部署根目录,恢复Git仓库上下文(不推荐)
如果确实需要部署项目根目录,需在部署步骤前重新初始化Git仓库:
- name: 重新初始化Git仓库(仅当必须部署根目录时使用) run: | git init git add . git commit -m "temp commit for git-ftp" - name: 通过FTP部署至SiteGround uses: SamKirkland/FTP-Deploy-Action@3.1.1 with: ftp-server: ${{ secrets.FTP_SERVER_FRONT }} ftp-username: ${{ secrets.FTP_USERNAME_FRONT }} ftp-password: ${{ secrets.FTP_PASSWORD_FRONT }} local-dir: ./
额外优化建议
- 升级
actions/checkout到v4版本,避免旧版本潜在问题:
- name: 检出代码 uses: actions/checkout@v4
- Node.js 14已停止官方维护,建议升级到18.x或20.x版本:
- name: 配置Node.js环境 uses: actions/setup-node@v4 with: node-version: '20.x'
内容的提问来源于stack exchange,提问作者schajx
相关产品推荐
相关产品推荐

