不用 GitHub Actions 怎么部署 Cloudflare Pages?Git 集成和直接上传的区别

先说结论:部署 Cloudflare Pages 不一定要用 GitHub Actions。如果你的 Pages 项目已经连接了 GitHub,每次推送代码,Cloudflare 都会自己构建和部署。如果是“直接上传”(Direct Upload)类型,就把整个网站构建好,再用 Wrangler 上传。

找找异变
阅读功能说明

收听会朗读正文;速读会按顺序显示短语,速度可调。语言练习可对照已有的不同语言版本。收藏保存在本浏览器中,可从播放器的收藏列表再次打开。用打砖块来读会把正文的文字变成砖块,边打边读。

分享这篇文章

分享这篇文章

不用 GitHub Actions 怎么部署 Cloudflare Pages?Git 集成和直接上传的区别
AI生成的示意图
广告
广告

本来只是想放一条链接

先说结论:部署 Cloudflare Pages 不一定要用 GitHub Actions。如果你的 Pages 项目已经连接了 GitHub,每次推送代码,Cloudflare 都会自己构建和部署。如果是“直接上传”(Direct Upload)类型,就把整个网站构建好,再用 Wrangler 上传。下面是我绕了一大圈才想明白的过程。

我要做的事其实很小。为了通过一个联盟营销平台的网站审核,我要在一篇真实的文章里放一条移动硬盘的商品链接。链接前面清楚写上:“本页面含有联盟链接,你通过链接购买时,站长可能会获得佣金。”生成链接、插进文章、提交到 GitHub。

这些都做完了。

可是代码进了 GitHub 的那一刻,一个误会暴露了。

代码在 GitHub 上,不等于网页已经在网上公开。

平时用的 GitHub Actions 这次用不了。有人提议:那就用 Cloudflare Worker 把这一个页面单独拦下来返回。可在这次的使用条件下,这条路也走不通。

明明只是想放一条链接,结果变成了一场部署会议:“CI 呢?Worker 呢?Pages 是连 Git 的,还是直接上传的?”

联盟营销版“圣家堂二号楼”就这样开工了。

不过,只要把各个机制拆开来看,事情一下子就简单了。


1. 为什么必须先有一个公开的页面

Sovrn Commerce 给内容网站和博客的入门说明是这样的:先在申请的网站上放好 Commerce 链接,产生一些点击,然后才进入审核。[3]

也就是说,不是“审核通过了再放链接”,而是先让审核方能看到真实放好的链接。

Sovrn 还要求:每个有联盟链接的页面,都要清楚告诉读者你可能从中拿到佣金,而且这段说明要放在链接或推广内容之前、读者先看得到的位置。[4]

这次需要的不是什么豪华的商品比较网站。条件很简单:

  • 申请的网站上确实有这篇文章;
  • 文章里有联盟链接;
  • 链接前面有佣金说明;
  • 任何人都能通过公开网址打开;
  • 放好之后,可以产生几次确认用的点击。

这里关键是倒数第二条:GitHub 仓库里有文件,不等于它已经是公开网页。


2. GitHub Actions 停了,Cloudflare Pages 不一定跟着停

GitHub Actions 是 GitHub 自带的自动化功能(CI/CD),用来在 GitHub 上跑构建、测试和部署。

而 Cloudflare Pages 有自己的 Git 集成,可以直接连接 GitHub 或 GitLab。只要你往连好的仓库推送代码,Cloudflare 就会自己构建、自己部署。[1]

流程是这样的:

推送到 GitHub → Cloudflare Pages 发现新提交 → Cloudflare 构建 → Cloudflare 部署

这条路上根本没有 GitHub Actions。

这点很重要。“GitHub Actions 用不了”和“没法从 GitHub 自动发布到 Cloudflare”不是一回事。两者是完全不同的东西。

打个比方:GitHub Actions 是你自家仓库里的传送带,Cloudflare 的 Git 集成则是快递员自己上门取件。

传送带停了,快递照样可以来取。


3. 第一步:看清你的 Pages 项目是哪种类型

在 Cloudflare Pages 上,如果这一点没搞清楚就动手,很快就会迷路。

发布方式主要有两种:

类型 由什么触发 谁来构建和部署 适合什么情况
Git 集成(Git integration) 推送到 GitHub / GitLab Cloudflare 以仓库为准,想要自动发布
直接上传(Direct Upload) 事先构建好的文件 Wrangler 或控制台 在自己电脑或别的 CI 里构建好,再直接上传

Cloudflare 官方文档写明:用 Git 集成创建的 Pages 项目,之后不能改成普通的直接上传项目。已经连了 Git 的项目还是可以用 Wrangler 手动部署,但不能在控制台里用拖放上传。[1][2]

反过来也一样:一开始就是直接上传的项目,之后不能在同一个项目里加上 Git 集成。想改成 Git 自动部署,就得新建一个 Pages 项目。[2]

所以第一个问题不是“怎么部署?”

而是:“我现在的 Pages 项目,是 Git 集成还是直接上传?”

弄清这一点,一半的选项就自动排除了。


4. 如果是 Git 集成,就不用为了发布去恢复 GitHub Actions

如果 GitHub 仓库和 Cloudflare Pages 已经正确连接,最快的路既不是 Worker,也不是换一个新的 CI。

在 Cloudflare Pages 里检查这几项:

  1. 连接的是正确的 GitHub 仓库;
  2. 生产分支(production branch)就是你真正要发布的分支;
  3. 生产分支的自动构建没有被暂停;
  4. 构建命令和输出目录跟现在的项目对得上;
  5. 推送后,Pages 的 Deployments 页面出现了新的部署;
  6. 在 pages.dev 地址上能看到新内容;
  7. 最后在你自己的域名上也能看到同样的新内容。

Cloudflare 的 Git 集成就是根据所连分支上的提交来构建和部署的。[1]

所以,就算 GitHub Actions 暂时用不了,只要 Cloudflare 自己的构建还在跑,网站照样能更新。

这时该做的不是再搭一套复杂系统,而是看看 Cloudflare 原本的“取件口”是不是开着。


5. 如果是直接上传,要上传整套构建结果,而不是只丢一个页面

直接上传,就是把做好的一整套静态文件交给 Cloudflare Pages。官方文档介绍的流程是:事先构建好文件,再用 Wrangler 或控制台上传。[2]

这时候很容易冒出一个危险的念头:

“我只改了一篇文章,只上传这一个 HTML 不就行了?”

如果你的静态网站是整体构建的,最好别这么做。

因为部署的单位不是“Git 里改动的那一个文件”,而是当时整个网站的构建结果。页面列表、CSS、JavaScript、搜索索引、图片、网址跳转规则等,往往会一起重新生成。只手动塞进一页,线上网站就和仓库对不上了。

用直接上传的话,基本流程是:

拉取最新代码 → 运行项目的构建命令 → 检查输出目录 → 上传全部输出 → 打开线上网址确认

比如 Node 写的静态网站,就运行项目自己的构建命令(像 pnpm build),然后上传生成的 dist 之类的目录。

关键是别让线上网站变成“有人手动改过一个文件、谁也说不清的另一个世界”。


6. Worker 这条退路用不了,就干脆删掉

想紧急公开一个页面时,用 Worker 拦截某个路径,这个思路本身是行得通的。

但像这次一样,使用条件不允许用 Worker,那围绕它做计划就没有意义。

“说不定能用”的路留在设计图上越多,后面维护就越麻烦。

  • GitHub Actions 用不了
  • Worker 也用不了
  • 那就在 Cloudflare Pages 的 Git 集成和直接上传之间二选一

就这么简单。

与其修十个紧急出口,不如先找到眼下开着的那扇正门。

别为了一条联盟链接,再盖一整套部署系统。

这是这次最大的教训。


7. 算不算“已发布”,要看真实页面,而不是看提交记录

运营网站最危险的,就是把中间步骤当成“完成”。

  • 代码写好了
  • 提交到 GitHub 了
  • 构建通过了
  • Cloudflare 上出现部署了

这些都重要,但读者看到的只有最后那个网址。

像这次的联盟审核页面,最后要确认:

  1. 用无痕窗口也能打开公开网址;
  2. 显示的是最新的文章内容;
  3. 佣金说明出现在链接前面;
  4. 商品链接能跳到正确的页面;
  5. 手机上显示正常;
  6. 需要的话,产生几次确认点击;
  7. 在 Sovrn 后台查看点击统计和审核状态。

Sovrn 对内容/博客类活动的说明是:先放链接,产生点击,然后审核。[3]

所以不是“放进 GitHub 了,等审核吧”,而是审核方能在线上网址看到真实链接,才算站到起跑线上。


8. 以后别把联盟链接写死在文章正文里

这一条链接手动放没问题。

但文章一旦有几百、几千篇,每次都要人来决定“这篇放不放广告?放哪?放什么商品?面向哪个国家?”,内容工厂旁边就会再长出一座广告工厂。

下一步,最好把文章正文和变现信息分开管理。

比如文章里只放这样一小段设置:

article_id: example-123
affiliate: true
placement: after_solution
max_products: 3
market_mode: auto
product_theme: external-storage

发布时再按这个顺序处理:

文章 → 判断是否变现 → 挑选商品 → 生成联盟链接 → 渲染页面时插入 → 统计效果

正文作为长期资产保留;商品网址、库存、商家、按国家分流,都做成可以随时替换的零件。

这样一来,链接失效或换商品时,就不用把 12 种语言的正文全翻一遍。

联盟链接不是文章本身。

把它当成之后再接到文章上的“销售管道”,长期运营会稳得多。


9. 结论:CI 挂了,先别盖新城堡,先找 Cloudflare 的入口

这次的经历很有代表性。

一开始只是:“为了审核,放一条移动硬盘链接吧。”

链接做好了,佣金说明写好了,代码也进了 GitHub。

可到了正式上线这一步,GitHub Actions 用不了;想用 Worker 绕过去,这条路也不通。

这时如果再加新系统,目标就会从“公开一条链接”悄悄变成“扩建部署系统”。

说到底,需要判断的只有这些:

  • 现有 Pages 是 Git 集成,就用 Cloudflare 自己的构建;
  • 是直接上传,就构建整个网站,再上传正式的构建结果;
  • Worker 用不了,就从候选里删掉;
  • 别把 GitHub 提交叫作“已发布”;
  • 在真实公开网址上确认佣金说明、链接、页面显示和点击。

技术上最危险的,不是选项太少。

而是用不了的选项一直留在设计图上。


同一作品的下一个问题: 做联盟推广每月赚1万日元很难?为什么调查说近一半人做到了

广告这个主题的书

本文包含广告(联盟链接)。 关于广告 As an Amazon Associate I earn from qualifying purchases.

分享这篇文章

如果这篇文章对你有帮助,可以支持本站。 支持本站

广告
广告
广告

再来一篇?有没有好玩的?

读完顺便看看:几篇相近的,还有几篇完全不同但很有意思的。

  1. 相近的话题阳光玫瑰才199日元?日本超市“每100克价格”为什么总让人看走眼
  2. “ABCDEFG I Need Money”是什么梗?字母念到G就要钱
  3. 完全不同,但很有趣“海鳗军团水泥管水槽”为什么这么好看?
  4. 《冰之城墙》小雪为什么这么让人共鸣?表面没事,回家却想个不停
  5. 为什么我动不动就哭?“泪失禁体质”不等于脆弱,照样能把工作做好
  6. 鳗重和鳗鱼盖饭到底有什么区别?在冈崎“うなぎのはせべ”本店实测:答案是鳗鱼多1.5倍,还有烫得离谱的热毛巾

今天读这篇

每一篇都回答读完本文后常有的下一个问题。

浏览全部文章更多「金钱」文章

查找其他文章

所有文章

Mendoi-chan

本站运营者

Mendoi-chan

把工作与日常生活中的麻烦整理成清晰的结构和下一步行动。