












最近我在处理一个前端项目部署问题时,踩了不少坑。
我的目标其实很明确:
最终,这套方案跑通了。
顺便也把中间遇到的各种报错和修复过程完整记录下来,给后面遇到类似问题的朋友一个参考。
顺带一提,我这次排查和部署的是一个服装视频生成相关项目,线上站点是:https://runwaymotion.com
很多人一开始会直接让 Vercel 连接自己的开发仓库,这在简单场景下没问题。
但如果你遇到这些情况,就容易出问题:
所以更稳妥的做法是:
整体流程如下:
我这次要解决的问题,本质上是:
主仓库继续正常开发,不影响现有流程。
Vercel 只看部署仓库,不再直接盯主仓库。
第三方工具、自动化提交、不同机器上的 commit,不再直接影响 Vercel 的部署识别。
在 GitHub 新建一个空仓库,例如:
runwaymotionrunwaymotion-vercel这里有个点很多人容易担心:
部署仓库不需要提前初始化 README,也不需要手动 first commit。
它可以是一个完全空的仓库,后续直接通过 git push 推送进去。
在主仓库中创建工作流文件:
目标是:
为了让 GitHub Actions 能向部署仓库推送代码,需要生成一个 Token。
我在排查过程中试过两类:
从实际排障体验来说,如果你只是想先快速打通同步链路,classic PAT 会更直接一些。
在主仓库里添加一个 Secret:
路径:
SettingsSecrets and variablesActionsNew repository secret这个 secret 后面会被 GitHub Actions 用来推送部署仓库。
这一步非常关键:
而是改成:
runwaymotion-vercel这样以后只要主仓库代码变化,GitHub Actions 同步到部署仓库,Vercel 就能在部署仓库层面触发自动部署。
最初使用的 GitHub Actions 配置大概是这样的:
name: Sync to Vercel Repo on: push: branches: - main jobs: sync: runs-on: ubuntu-latest steps: - name: Checkout source repo uses: actions/checkout@v4 with: fetch-depth: 0 - name: Push to deploy repo env: TARGET_REPO: https://x-access-token:${{ secrets.VERCEL_DEPLOY_REPO_TOKEN }}@github.com/你的用户名/你的部署仓库.git run: | git config user.name "sync-bot" git config user.email "your-email@example.com" git remote add deploy "$TARGET_REPO" git push deploy HEAD:main --force
这个思路没问题,但实际执行时遇到了一连串报错。
下面按顺序把这次遇到的问题都记下来。
exit code 128第一次跑 GitHub Actions 时,日志报错:
同时还看到一条提醒:
实际上:
exit code 128 才是真正的失败先把:
升级成:
这样可以顺手规避 Node 20 的弃用提醒,也更稳一点。
Repository not found后面很快又遇到报错:
但这里要特别说明:
GitHub 的空仓库是可以直接接受第一次 push 的。
所以“仓库是空的”不是问题根因。
更大的可能是:
为了继续缩小问题范围,我把部署仓库临时改成 Public。
结果错误变成了:
这个报错特别关键。
第一,仓库路径其实没问题。
第二,当前 push 时实际使用的身份是:
而不是我自己配置的 PAT。
actions/checkout 默认凭证覆盖了自定义 Token继续分析后发现,问题出在:
这个 Action 默认会把认证信息持久化到本地 Git 配置里。
结果就是:
github-actions[bot]
在 checkout 这一步加上:
修改后如下:
它的作用是:
git push 时才会真正使用我们手动配置的 token这一步,是整次排查里最关键的修复点之一。
当认证链路终于打通之后,又遇到了一个新报错:
因为它说明:
.github/workflows/...workflow scope 的 PAT 去修改 workflow 文件也就是说,同步链路基本已经打通,只差最后一步权限处理。
workflow 权限如果你想把 .github/workflows 也一起同步到部署仓库,那就需要:
repoworkflow这样就可以完整镜像整个仓库。
.github/workflows这是我最终更推荐的方案。
因为部署仓库只是给 Vercel 用的,通常并不需要主仓库里的 GitHub Actions 工作流。
workflow scope最后跑通的版本如下:
name: Sync to Vercel Repo on: push: branches: - master jobs: sync: runs-on: ubuntu-latest steps: - name: Checkout source repo uses: actions/checkout@v5 with: fetch-depth: 0 persist-credentials: false - name: Configure Git run: | git config user.name "vercel-sync-bot" git config user.email "your-email@example.com" - name: Verify secret exists env: TOKEN: ${{ secrets.VERCEL_DEPLOY_REPO_TOKEN }} run: | if [ -z "$TOKEN" ]; then echo "VERCEL_DEPLOY_REPO_TOKEN is empty" exit 1 fi echo "Secret exists" - name: Remove workflow files before sync run: | rm -rf .github/workflows - name: Add deploy remote env: TARGET_REPO: https://x-access-token:${{ secrets.VERCEL_DEPLOY_REPO_TOKEN }}@github.com/你的GitHub用户名/你的部署仓库名.git run: | git remote remove deploy 2>/dev/null || true git remote add deploy "$TARGET_REPO" git remote -v - name: Commit cleanup if needed run: | git add -A git diff --cached --quiet || git commit -m "Remove workflow files for deploy mirror" - name: Push to deploy repo run: | git push deploy HEAD:master --force
actions/checkout@v5拉取主仓库代码。
persist-credentials: false阻止 github-actions[bot] 的默认认证覆盖自定义 PAT。
Verify secret exists检查 VERCEL_DEPLOY_REPO_TOKEN 是否为空,避免排查半天才发现 Secret 根本没配置。
rm -rf .github/workflows防止同步 workflow 文件时触发 workflow scope 限制。
git remote add deploy添加部署仓库远程地址。
git push deploy HEAD:master --force把当前主仓库的内容强制同步到部署仓库。
--force部署仓库的定位不是开发仓库,而是:
所以这里使用:
是合理的。
部署仓库不应该手动改代码。
因为下次同步时,这些改动会被覆盖掉。
exit code 128 只是结果,不是根因一定要往前翻红字,看真正失败的是哪一步。
Repository not found 不一定真的是仓库不存在很多时候是:
github-actions[bot] 时,要优先怀疑默认凭证覆盖如果日志里出现:
那通常说明当前 Git 操作用的是 Actions 默认身份,不是你的自定义凭证。
它完全可以直接接受第一次 push。
如果同步内容包含 .github/workflows/*.yml,GitHub 会要求 token 拥有 workflow 相关权限,否则就会被拒绝。
这套方案最终成功实现了:
对我来说,这比直接让 Vercel 连接主仓库更稳,也更适合后续持续维护。
如果你也在做类似的前端项目,或者在处理自动部署、GitHub 同步、Vercel 部署链路相关问题,可以参考我这套思路。
我的项目线上地址也放在这里,方便需要的人看看实际效果:https://runwaymotion.com。
这次问题的本质,不是 Vercel 本身,而是:
真正关键的修复点,只有三个:
actions/checkout@v5persist-credentials: false.github/workflows,避免 workflow 权限限制把这三点处理好,“主仓库开发 + 部署仓库给 Vercel” 这套方案就能稳定跑通。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。