Files
blog/代码源与构建平台选型.md
T
zqlit e0218b42bb docs: 迁 CNB 前的架构决策文档 + 构建骨架
- 决策文档:架构总览 / 代码源与构建平台选型 / CNB构建落地方案 /
  EdgeOne双区域 / Gitee / 阿里云ESA / 精简方案
- CNB 构建骨架:deploy/Dockerfile、bin/linux/hugo
  (84MB,linux/amd64 extended 0.128.2,供 CNB 容器 COPY 用)
- scripts/setup-cnb-remotes.sh:双远端切换(CNB 主仓 + GitHub 备份)
- .gitignore 补 .workbuddy/(工作数据不入库)
2026-10-04 12:40:17 +08:00

9.4 KiB
Raw Blame History

代码源与构建平台选型

回答的问题:「想简化是不是只能走 EdgeOne?」

结论先行:不是"只能",但在你当前的约束下,EdgeOne 是最省事的那一个。 而且真正要换的不是 CDN —— 是**「托管构建」**。EdgeOne 恰好一条顶两条(构建 + 分发), 这是 Cloudflare 和阿里云 ESA 都做不到的。

另外有一个会改变结论的数字:Gitee 免费版单仓库上限 500MB,而你的 .git 是 588MB。 所以国内代码源的第一选择不是 Gitee,而是 CNB。


一、把问题重新定义一次

你说「之前是 GitHub Actions 部署,用得很稳,但账号被标记了」。

那么现在这一整套东西,本质是你自己复刻了一套 GitHub Actions:

GitHub Actions 原来的角色 你现在用自建件替代
github.com(代码托管) 自建 Gitea
GitHub 的 runner(构建执行) act_runner
upload-artifact(产物传递) Gitea artifact → COS → 中转机
Pages 直连(产物落地) sync.sh → 又拍云 → 多吉云

所以要"简化回去",正确的问题是:找一个托管的构建服务,把这四个自建件一起替掉。

CDN 选谁(EdgeOne / CF / ESA / 多吉云)是另一个问题,它不解决构建复杂度。


二、三条硬约束(都核实过,不是印象)

约束 实测/官方值 影响
你的仓库体积 .git 588MB / 955 提交;工作区 803MB 决定代码源能不能装下
你的产物体积 public 424MB / 3267 文件,最大单文件 12.8MB 决定托管平台的文件数/单文件门槛
Hugo 版本 0.128.2 托管构建需能指定版本
备案 鄂ICP备2022015735号-1 境内加速的前提,你已具备

三、★ 三个关键发现

发现 1:EdgeOne Pages 官方支持 Gitee / GitLab 作为 Git 源

官方文档原文:「Pages 目前支持 GitHub, GitLab, Gitee 等 Git 提供商的接入」。 第三方 Nitro 部署文档也写:「EdgeOne supports deployments from GitHub, GitLab, Gitee, and CNB」。

这条直接决定了「能不能找回 GitHub Actions 那种简单感」—— 能。 代码推到国内托管平台 → EdgeOne 自动拉取、自动构建、自动部署。不需要你自己的 runner。

发现 2:Gitee 免费版装不下你的仓库

Gitee 官方配额页(help.gitee.com/account/usage-quota):

项 社区版免费额度
单仓库容量 ≤ 500 MB
单文件 ≤ 50 MB
用户总仓库容量 5 GB

你的 .git 是 588MB → 超了 17.6%。 推上去会被锁定推拉服务。 (Gitee 提供 git-repo-clean 瘦身工具可以降到 500MB 以下,但那是额外工作。)

发现 3:CNB 是更合适的国内代码源 —— 而且和 EdgeOne 有官方集成

CNB(Cloud Native Build,cnb.cool) 是腾讯的 AI Native Git 平台,社区版免费:

项 免费额度
仓库存储 100 GiB(你的 588MB 毫无压力)
对象存储 100 GiB
云原生构建 160 核时/月
云原生开发 1600 核时/月
登录方式 微信扫码

160 核时换算:4 核跑 10 分钟 = 4 × (10/60) ≈ 0.67 核时 → 一个月能跑 约 240 次构建。你今天按每月 60–90 次算,用掉不到 40%。

而且 EdgeOne 官方专门写了 CNB 插件文档(pages.edgeone.ai/document/using-cnb-plugin):

在 CNB 流水线里 npm run build → npx edgeone pages deploy -n <项目名> -t $EDGEONE_API_TOKEN

这条路官方背书,100% 可行。


四、四种组合对比

代码源 构建在哪 产物去向 自维护机器 免费额度 卡点
① CNB + EdgeOne Pages ★ CNB CNB 流水线(托管) EdgeOne 国际 + 国内 0 台 100GiB + 160 核时/月 + 500 构建/月 需绑微信/腾讯云账号
② Gitee + EdgeOne Pages Gitee EdgeOne Git 集成(4核6G) EdgeOne 国际 + 国内 0 台 5GB / 500 构建/月 仓库必须先瘦身到 500MB 以下
③ GitLab.com + CF Pages GitLab.com CF 侧 仅 CF(产物拿不出来) 0 台 CF 500 次/月 境内无解;CF 国内访问慢 3 倍
④ 保留 Gitea + EdgeOne Pages 自建 Gitea(mirror→CNB) CNB EdgeOne 1 台(Gitea) 同 ① 没砍干净;但写作后台零改动

为什么推荐 ①:唯一一个同时满足「代码源在国内且装得下仓库」+「构建托管」+「境内外都能落」+「免费」的组合。


五、推荐形态

写作侧                                    构建(托管)                      分发(托管)
┌────────────────────┐          ┌──────────────────────────┐   ┌──────────────────────────┐
│ write-server       │          │  CNB(cnb.cool)          │   │  EdgeOne 国际站 Pages     │
│ (本地/服务器)     │  push    │  免费 100GiB / 160 核时/月 │   │  → usj.cc 境外解析        │
│ 直接写 .md + git   ├─────────▶│                          │   │                          │
│ 只改 remote URL    │          │  .cnb.yml:               │──▶│  EdgeOne 国内站 Makers    │
└────────────────────┘          │   hugo --minify          │   │  → 备案域名 境内解析      │
                                │   edgeone pages deploy   │   │                          │
   或本地 hugo 后手动 push ─────▶│   (境外 + 境内 两个项目)│   └──────────────────────────┘
                                └──────────────────────────┘

.cnb.yml 骨架(复刻你现在 deploy.yml 做的事)

main:
  push:
    stages:
      - name: 构建 Hugo 站点
        image: klakegg/hugo:0.128.2-ext
        script: |
          hugo --minify --gc

      - name: 部署境外
        image: node:20
        script: |
          npx edgeone pages deploy ./public \
            -n hugo-blog-overseas -t $EDGEONE_TOKEN_INTL -a overseas

      - name: 部署境内
        image: node:20
        script: |
          npx edgeone pages deploy ./public \
            -n hugo-blog-cn -t $EDGEONE_TOKEN_CN -a global

⚠️ -a global(含中国大陆)目前只在国际站文档里明确,且官方文档自相矛盾。 另一条稳妥路径是国内站 Makers 单独建一个项目(账号体系与国际站独立), 绑你的备案域名。这个需要实测一次定论。


六、砍掉 / 保留

砍掉(9 项)

砍掉 原因
act_runner CNB 托管构建取代
广州中转机 产物直接落在 EdgeOne,不需要中转
sync.sh 轮询 同上
腾讯云 COS 同上(砍 COS 这件事本身也随之结束)
Gitea artifact 链 那串 v3/v4 兼容坑一起消失
8 处 github.server_url 兼容分支 不再需要伪装成 GitHub
又拍云 EdgeOne 国内站直接 serve 境内
多吉云 同上(境内 CDN 层)
三套通知里的两套 保留一套即可

发布链路:7 环节 → 3 环节(写作 → 构建 → 上线) 自维护机器:3 台 → 0 台 厂商:Gitea自建 + COS + 又拍云 + 多吉云 + EdgeOne + 失效的 GitHub → CNB + EdgeOne(同为腾讯体系)

保留

  • Hugo + content + themes —— 完全不动
  • blog-admin(artalk-cf) —— 本来就跑在 CF Workers,一行不改
  • write-server —— 几乎不用改,只把 origin 的 remote URL 指向 CNB。 CNB 是标准 git + 提供统一 HTTPS Token,lib/git.ts 的 git pull --rebase / git push 逻辑照常工作

七、待确认(3 条,按重要性排序)

  1. EdgeOne 免费版的流量额度。官方「限制与配额」页没有列「流量」这一项;第三方说法互相矛盾(一处说 50GB/月,一处说不限量)。 按你的站点规模估算:单页 1–3MB,50GB/月 ≈ 2–5 万次浏览 —— 个人博客大概率够, 但那个 12.8MB 的 mp4 如果被反复播放会吃掉不少。这一条开工前必须先确认。
  2. CNB 是否可直接作为 EdgeOne Pages 的 Git 源导入。第三方文档说支持,官方只在插件路径里明确。 不影响可行性(走插件路径必然可行),只影响配置方式。
  3. 境内用国际站 -a global 还是国内站 Makers 独立项目。一次实验可定论。

八、最小验证(成本极低,建议先做)

不用改任何现有东西,一次性验证整条链路是否成立:

  1. 建一个 CNB 仓库(微信扫码,2 分钟)
  2. 往里放一个最小 Hugo 站 + 上面的 .cnb.yml(或先放个 hello world)
  3. 拿一个 EdgeOne API Token(你已经有),跑一次 push
  4. 看三件事:CNB 能不能构建 → 能不能部署到 EdgeOne → 国内机实测访问延迟

这一步跑通,等于确认了整条路;跑不通,损失是 20 分钟,不是 30 天。


本文档基于 2026-10-04 核实的官方文档与实测数据。所有配额均引自官方页面,第三方来源已标注。