一推即发:基于 Git 与 Markdown 的多平台自动发布流水线

文章目录
- [一推即发:基于 Git 与 Markdown 的多平台自动发布流水线](#一推即发:基于 Git 与 Markdown 的多平台自动发布流水线)
-
- 一、为什么你需要这套流水线?
- 二、整体架构:从"写完"到"上线"的三个核心环节
- [三、第一步:统一 Markdown 文档规格](#三、第一步:统一 Markdown 文档规格)
- 四、第二步:图片的"透明"处理
- 五、第三步:选择你的"分发引擎"
- [六、第四步:用 GitHub Actions 串起整个流程](#六、第四步:用 GitHub Actions 串起整个流程)
-
- [1. 准备配置文件](#1. 准备配置文件)
- [2. 编写 GitHub Actions 工作流文件](#2. 编写 GitHub Actions 工作流文件)
- [3. "写完即发"的最终步骤](#3. “写完即发”的最终步骤)
- 七、进阶技巧与注意事项
- 八、结语
想象一下:你每天在本地用 Obsidian、Typora 或 VS Code 写完技术博客,
Ctrl+S保存,打一个git push,几分钟后,你的文章就自动出现在掘金、CSDN、知乎、微信公众号甚至 Medium 上。全程不需要打开任何一个网站的编辑器,不需要手动上传封面、复制粘贴、重新排版。这不是幻想,而是完全可以搭建的"一文多发"自动化流水线。关键词:Write once, publish everywhere(一次写作,处处抵达)
本文将以最贴近国内创作者习惯的方式,系统性地介绍这套笔耕不辍的秘密武器:基于 Git 仓库 + CI/CD + 分发工具的本地 Markdown 多渠道自动发布方案。
一、为什么你需要这套流水线?
技术写作者的痛点是共通的:
- 重复劳动:同一篇文章,要登录五六个平台,逐一粘贴、排版、修改格式。
- 图片管理地狱:每个平台的图片上传机制不同,有的支持外链,有的必须本地上传,来回折腾。
- 版本混乱:文章修改后,经常忘记同步到某个平台,导致内容不一致。
- 平台依赖:一旦某个写作平台关闭或限流,你的内容资产可能瞬间蒸发。
理想的解决思路是:
- 内容的唯一真实来源(Source of Truth)放在自己手里 ------ 即本地的 Markdown 文件。
- 图片在写作时自动上云 ------ 存储到 OSS 等图床,一次粘贴,永久可用。
- 发布动作自动触发 ------ 通过代码推送或定时任务,由 CI/CD 运行分发脚本。
- 多平台自动适配 ------ 脚本调用各平台 API 或模拟浏览器操作,自动把文章发出去,并处理好图片、标签、封面等细节。
这正是我们要搭建的工作流。
二、整体架构:从"写完"到"上线"的三个核心环节
本地 Markdown 编辑器(本地图床自动上传)
│
▼
Git 私有仓库(中央内容库)
│
▼
Git Push 触发 CI/CD 流水线(如 GitHub Actions)
│
▼
分发脚本(多平台自动发布)
你只需要在本地专注于内容和图片(PicGo 已经帮你搞定了图片上传),剩下的全部交给自动化。下面我们逐步拆解。
三、第一步:统一 Markdown 文档规格
为了让分发工具能准确识别文章标题、标签、封面、原始链接等元数据,必须在 Markdown 文件开头加入 Front Matter。这是目前几乎所有静态站点生成器和自动化工具的通用规范。
示例文件 2026-05-12-how-to-build-ci-cd-for-blog.md:
yaml
---
title: "构建个人博客的 CI/CD 自动发布流水线"
date: 2026-05-12
tags: [DevOps, GitHub Actions, 自动化]
cover: "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/cover.jpg"
source_url: "https://yourblog.com/original-post-url"
---
## 前言
这里开始写正文...
title:将直接作为发布后的文章标题。date:排序和归档用。tags:多个平台都支持标签,自动转换为对应格式。cover:文章封面图 URL,图床链接即可。source_url:可选,指向你的个人博客原文,方便分发后互链。
有了这个约定,自动化工具就能"读"懂你的每一篇文章。
四、第二步:图片的"透明"处理
你已经在用 PicGo + 阿里云 OSS 实现粘贴即上传,这解决了写作时的第一环。接下来要解决的是分发时,各平台对图片的不同处理方式。
一个好的分发工具会帮你完成剩下的事:
- 对于支持外部图片链接的平台(如掘金、CSDN、知乎、SegmentFault 等),直接保留你的 OSS URL 即可,无需任何操作。
- 对于微信公众号这类必须将图片上传到自身素材库的平台 ,分发工具会自动:
- 解析 Markdown 中的图片链接;
- 从你的阿里云 OSS 下载图片到 CI 运行环境;
- 调用微信公众号的"上传图片素材" API;
- 将返回的
mmbiz.qpic.cn链接替换到正文中。
整个过程你完全不用关心。唯一需要确保的是:你的阿里云 OSS Bucket 的访问权限对 CI 环境是可读的(如果是公共读或者配置了临时密钥,自然没问题)。
五、第三步:选择你的"分发引擎"
目前市面上有多种现成的工具,可以将 Markdown 内容分发到多个平台。主要可以分为命令行工具(CLI)、桌面软件和浏览器插件三类。我们重点对比四款最值得关注的 CLI/API 工具,因为它们是实现"零触摸"全自动化的核心。
主流分发工具对比
| 对比维度 | multi-publisher | 文颜 (Wenyan) | Crier | PostSync |
|---|---|---|---|---|
| 核心形式 | Node.js CLI | Node.js CLI | Python CLI | 桌面软件 (GUI) |
| 支持平台数量 | 20+:公众号、知乎、掘金、CSDN、B站、简书等 | 聚焦国内:公众号、知乎、头条等 | 国际为主:Dev.to, Medium, Hashnode, Ghost, Bluesky 等 | 国内主流:公众号、掘金、CSDN、知乎等 |
| 分发机制 | Playwright 自动化浏览器 + Cookie 模拟 | 官方 API(微信公众号深度集成) | 各平台官方 API Key | 模拟用户操作 |
| 自动化集成 | ⭐⭐⭐⭐⭐ CI/CD 完美适配 | ⭐⭐⭐⭐⭐ 管道友好,可集成 AI Agent | ⭐⭐⭐⭐⭐ CI/CD 完美适配 | ⭐⭐ 本地手动运行 |
| 图片处理 | 自动下载外链图片上传到公众号等 | 全自动处理微信图片 | 依赖平台是否接受外链 | 手动或半自动 |
| 适用人群 | 追求覆盖面广、愿折腾配置的深度用户 | 重度微信使用者,希望嵌入工作流 | 面向国际的英文技术作者 | 不想接触命令行的新手 |
如果你主要面向国内平台,且希望整个流程完全在服务器上自动运行,
multi-publisher和文颜是最佳组合 :前者覆盖广度,后者深耕微信。如果你是面向 Dev.to、Medium 等国际社区,
Crier的 API 模式会让你极其省心。
浏览器扩展方案:极简主义的另一条路
如果你暂时不想引入 CI/CD,但依然想享受一键多发的便捷,可以试试浏览器扩展,例如 COSE 或 SyncCaster。它们的工作方式是:
- 你在掘金、CSDN 等网站的编辑页粘贴 Markdown;
- 扩展通过 DOM 注入,自动帮你把相同内容填充到其他已经打开的网页编辑器中。
虽然做不到"git push 后喝咖啡"的完全自动化,但对于刚开始尝试一文多发的用户,上手成本几乎是零。
六、第四步:用 GitHub Actions 串起整个流程
下面我们以 multi-publisher 为例,展示如何把上面的所有环节编排成一个 GitHub Actions 工作流。假设你已经创建了一个私有仓库,并把 Markdown 文件放在 posts/ 目录下。
1. 准备配置文件
在仓库根目录创建一个 multi-publisher.config.js(或对应工具的配置),存放各平台的登录凭证(Cookies、API Key 等)。务必使用 GitHub Secrets 而不是硬编码!
示例配置片段:
javascript
module.exports = {
platforms: {
juejin: {
cookie: process.env.JUEJIN_COOKIE,
// ...
},
zhihu: {
cookie: process.env.ZHIHU_COOKIE,
},
weixin: {
appId: process.env.WX_APP_ID,
appSecret: process.env.WX_APP_SECRET,
},
// ...
}
};
将这些敏感信息添加到仓库 Settings → Secrets and variables → Actions,命名为 JUEJIN_COOKIE、WX_APP_ID 等。
2. 编写 GitHub Actions 工作流文件
在 .github/workflows/publish.yml 中写入:
yaml
name: 自动发布博客到多平台
on:
push:
branches:
- main
paths:
- 'posts/*.md' # 仅当 posts 下的 md 文件变更时触发
workflow_dispatch: # 允许手动触发
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整历史,有些工具需要比对变更
- name: 设置 Node.js 环境
uses: actions/setup-node@v4
with:
node-version: 20
- name: 安装依赖
run: npm install -g multi-publisher # 或 clone 项目后 npm ci
- name: 运行分发脚本
env:
JUEJIN_COOKIE: ${{ secrets.JUEJIN_COOKIE }}
ZHIHU_COOKIE: ${{ secrets.ZHIHU_COOKIE }}
WX_APP_ID: ${{ secrets.WX_APP_ID }}
WX_APP_SECRET: ${{ secrets.WX_APP_SECRET }}
# ... 其他平台凭证
run: multi-publisher publish --dir posts --config multi-publisher.config.js
3. "写完即发"的最终步骤
现在你的日常创作流变成了:
-
在本地用任意 Markdown 编辑器写文章,图片自动上传至 OSS。
-
完成 Front Matter 信息填写。
-
执行:
bashgit add posts/新文章.md git commit -m "新文章: 构建个人博客的 CI/CD 自动发布流水线" git push -
几分钟后,你的文章就会自动出现在所有已配置的平台,并附上了正确的封面和标签。
如果想单独补发某篇旧文章,可以在 Actions 页面手动触发工作流(workflow_dispatch),指定参数即可。
七、进阶技巧与注意事项
-
Cookie 的有效期管理
像知乎、掘金等平台的 Cookie 不是永久有效的,通常几周或一个月就会过期。你可以用
multi-publisher自带的login命令在本地登录一次,生成持久化的 token,或者定期在 Actions 中执行登录刷新,并将新的 Cookie 更新回 Secrets。 -
多平台排版的细微差异
不同平台对 Markdown 的渲染存在细微差异(如代码块高亮、表格支持)。优秀的 CLI 工具会内置转换适配层,但你也可以在自己的 Markdown 中使用通用语法,并在需要时通过 Front Matter 的自定义字段控制。
-
避免重复发布
大多数工具会在发布后将文章状态(如平台的文章 ID)记录在一个本地 JSON 文件中,可以通过 Git 追踪。你也可以在 Actions 中利用
actions/cache缓存或存储到 Git 的另一个status/目录,避免每次推送都重复发文。 -
与现有个人博客的协同
很多作者会先部署自己的静态博客(如 Hexo、Hugo、VuePress),然后把这些工具作为博客的"推广分发层"。完整流程是:
- 推送 Markdown 到博客仓库 → 博客自动构建部署。
- 博客的 RSS feed 或 Webhook 再触发一个独立的 Actions,将文章同步到各大社区。
这样既保留了自己的内容主权,又实现了最大范围的曝光。
八、结语
从"本地写 MD 图片自动上云"到"推送即多平台上线",这条自动化之路在今天的技术生态下已经非常成熟。它的核心思想其实很简单:用开发者最擅长的方式(代码和 CI/CD)来解决内容创作中的机械重复劳动。
一旦搭建完毕,你的创作效率会得到质的提升。你不再需要适应每个平台的编辑器,也不再需要把时间浪费在排版上。每天只需专注思考和表达,剩下的全部交给流水线。
如果你还在手动往五个网站复制粘贴文章,不如趁这个周末,选一个你喜欢的工具(比如 multi-publisher 或 文颜),配置好 GitHub Actions,享受一次"git push" 然后静待花开的感觉。
延伸阅读与工具资源
- multi-publisher GitHub 仓库
- 文颜 CLI 使用文档
- Crier: Publish Markdown to Dev.to, Medium & more
- PostSync 桌面版下载
- GitHub Actions 官方文档
- PicGo + 阿里云 OSS 配置指南
声明:本文提及的工具均为社区开源项目,选择时请根据自己的需求评估。Cookie 及 API Key 属于敏感信息,请妥善保管并定期更新。