昨天,在提交新文触发 Vercel 部署时,GitHub Action 报错,导致 CI 失败。而就在前一天,还一切正常。并且,我们也没有对 CI 和 Vercel 进行任何配置变更。
我们的环境:
- GitHub 免费公开组织下的私有仓库
- Vercel 免费个人账户
问题描述
GitHub Action 页面的报错如下:
Error: Git author **** must have access to the team ***'s projects on Vercel to create deployments.
Learn more: https://vercel.com/docs/deployments/troubleshoot-project-collaboration
根据此错误信息,可以明确是 Vercel 部署权限校验失败。在触发部署时,Vercel 会检查 Git 提交者的身份,以确保其对 Vercel 上的目标项目具有足够的访问权限。当权限不匹配时,部署流程将被阻止。
排查步骤
检查了当前 GitHub 仓库中的配置的 Secrets:
Vercel 中创建对应的 Token:
以及对应的 ci.yaml
文件,并没有发现什么问题。(注:CI 配置参考可《出海技术人的“全能基础设施套装” —— Vercel 篇》)
随后我们查阅了 Vercel 的官方文档《 Troubleshoot project collaboration 》,该文档提供了两种主要的故障排查方向:
- 团队配置 (Team Configuration):确认团队成员是否在 Vercel 项目设置中正确添加。
- 限制:Pro Plan
- 账户配置 (Account Configuration):检查项目所有者是否正确关联了其 GitHub 账户,并确保其他成员的账户配置正确。
- 限制:免费账户只能绑定个人的公开仓库
显然,我们目前的账户类型无法实施以上改动:我们既不想现在升级,也不想改动现有的仓库类型。
至于 Vercel 账户配置,我也仅是绑定了个人 GitHub 账户。
抱着试试看的想法,我们断开了 GitHub 账户绑定,重新触发 CI 后,成功了:回到了之前任何团队成员提交都能正常触发 CI 的状态。
此时,我们怀疑近期 Vercel 可能做了升级,改变了认证行为:
- 如果 Vercel 绑定了个人 GitHub 账户,会先将 CI 触发者的账户与绑定的 GitHub 账户进行比对,若不一致就终止部署;
- 如果 Vercel 未绑定个人 GitHub 账户,就会使用 Token 进行验证。
我们查询了 (Vercel 发布列表) [https://github.com/vercel/vercel/releases],发现 Vercel CLI 的版本从 v46.0.4 升级到了 v46.1.1。新版本包含安全策略的增强,它可能是此次问题的根源。
解决方案
断开 Vercel 账户与 GitHub 个人账号的绑定可以解决问题,但这种方式会允许任何人提交代码后均可触发 CI(适合于我们这种高度信任且合作紧密的小团队)。
对于 CI 发布安全要求较高的项目,可以参考《Troubleshoot project collaboration》文档,根据项目需求进行相应的权限配置。