turbo + vercel cli 实现简单的 monorepo 文档部署
2024年7月1日大约 3 分钟
turbo + vercel cli 实现简单的 monorepo 文档部署
相比于上一次的工作流配置,本次改造仅仅是应用了 turbo 工具,实现了任务编排。
并且处理了以下边缘情况:
- 打包文件的剪切移动。实现文档项目和部署路径之间的解耦。
- 处理文件移动命令在 window 系统和 linux 系统内有故障的 bug。
- 处理新项目执行
vercel pull
时获取不合适的运行命令 bug。 - 优化了工作流的变量。
工作流文件
# use-vercel-cli-build-try-4.yaml
# 参考资料
# https://vercel.com/guides/how-can-i-use-github-actions-with-vercel
# https://vercel.com/guides/how-to-alias-a-preview-deployment-using-the-cli
name: 基于vercel命令的部署
env:
# vercel的token
vct: ${{ secrets.vercel_token }}
# 从教程内得知 环境变量名称必须大写
VERCEL_ORG_ID: ${{ secrets.vercel_orgId }}
VERCEL_PROJECT_ID: ${{ secrets.vercel_projectId }}
# vercel项目名称
pjn: vercel-monorepo-test-1-zn20
# 项目路径
p1: ./packages/monorepo-1
p2: ./packages/proj-2-vp2-custom-components
p3: ./packages/monorepo-3
p4: ./packages/monorepo-4
p5: ./packages/monorepo-5
# 项目url
p1-url: monorepo-1.ruancat6312.top
p2-url-1: monorepo-2.ruancat6312.top
p2-url-2: m2.ruan-cat.com
p2-url-3: m2.ruancat6312.top
p3-url: monorepo-3.ruancat6312.top
p4-url: monorepo-4.ruancat6312.top
p5-url-1: monorepo-5.ruancat6312.top
p5-url-2: monorepo5.ruan-cat.com
on:
push:
branches:
- dev
jobs:
Deploy-Production:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: 开启 corepack
run: corepack enable && corepack install
- name: 检查pnpm版本
run: pnpm -v
- name: 安装整个项目的依赖
run: pnpm i
- name: 用npm安装vercel cli工具
run: npm i -g vercel@latest
- name: 检查vercel cli版本
run: vc -v
- name: 各子项目连接现有的vercel项目
# 本地window使用
# run: vc link --yes --cwd=./packages/monorepo-3 --project=vercel-monorepo-test-1-zn20
run: |
vc link --yes --cwd=${{env.p1}} --project=${{env.pjn}} -t ${{env.vct}}
vc link --yes --cwd=${{env.p2}} --project=${{env.pjn}} -t ${{env.vct}}
vc link --yes --cwd=${{env.p3}} --project=${{env.pjn}} -t ${{env.vct}}
vc link --yes --cwd=${{env.p4}} --project=${{env.pjn}} -t ${{env.vct}}
vc link --yes --cwd=${{env.p5}} --project=${{env.pjn}} -t ${{env.vct}}
- name: vercel生成特定.vercel/output/static目录
# build命令仍然需要用token来运行。
# run: vc build --yes --prod --cwd=./packages/monorepo-3 -A ./vercel.null.json
run: |
vc build --yes --prod --cwd=${{env.p1}} -A ./vercel.null.json -t ${{env.vct}}
vc build --yes --prod --cwd=${{env.p2}} -A ./vercel.null.json -t ${{env.vct}}
vc build --yes --prod --cwd=${{env.p3}} -A ./vercel.null.json -t ${{env.vct}}
vc build --yes --prod --cwd=${{env.p4}} -A ./vercel.null.json -t ${{env.vct}}
vc build --yes --prod --cwd=${{env.p5}} -A ./vercel.null.json -t ${{env.vct}}
- name: turbo并发打包全部子项目
run: pnpm run on-github-action-flow
- name: 各子项目上传文件并部署到vercel内
run: |
url1="$(vc deploy --yes --prebuilt --prod --cwd=${{env.p1}} -t ${{env.vct}})"
vc alias -t ${{env.vct}} set "$url1" ${{env.p1-url}}
url2="$(vc deploy --yes --prebuilt --prod --cwd=${{env.p2}} -t ${{env.vct}})"
vc alias -t ${{env.vct}} set "$url2" ${{env.p2-url-1}}
vc alias -t ${{env.vct}} set "$url2" ${{env.p2-url-2}}
vc alias -t ${{env.vct}} set "$url2" ${{env.p2-url-3}}
url3="$(vc deploy --yes --prebuilt --prod --cwd=${{env.p3}} -t ${{env.vct}})"
vc alias -t ${{env.vct}} set "$url3" ${{env.p3-url}}
url4="$(vc deploy --yes --prebuilt --prod --cwd=${{env.p4}} -t ${{env.vct}})"
vc alias -t ${{env.vct}} set "$url4" ${{env.p4-url}}
url5="$(vc deploy --yes --prebuilt --prod --cwd=${{env.p5}} -t ${{env.vct}})"
vc alias -t ${{env.vct}} set "$url5" ${{env.p5-url-1}}
vc alias -t ${{env.vct}} set "$url5" ${{env.p5-url-2}}
下一步优化思路
github action 的命令从串行改成并行
目前的运行命令,大多数还是串行的运行命令。比如 vercel 的 link、build、deploy 和 alias 命令,现在在工作流内的写法仍旧是串行的,不是并行的。
冗长的变量
变量其实挺多的。未来 monorepo 变多时,重复冗余的内容会很多。
快速耗尽的 token 免费额度
使用 vercel cli 的 api 实现的部署,在目前的 monorepo 项目中,发现不足以支撑高强度的,短时间内的频繁更新,额度消耗太快了。
- https://github.com/vercel/vercel/discussions/6617
- https://vercel.com/docs/limits/overview#deployments-per-day-(free)
能不能实现差异化的部署?
或者说我直接去找其他的部署平台?不一定要吊死在 vercel 这一棵树上?