Knowledge

用旧笔记本自建 Woodpecker CI:从选型到 Gitee 适配

用旧笔记本自建 Woodpecker CI:从选型到 Gitee 适配

封面图:旧 T410 笔记本运行 Woodpecker CI 的私有 CI 架构

私有仓库的 CI 一旦提交频繁,GitHub Actions 的算力时间和存储配额就会见底,而从中国大陆访问 GitHub 还经常超时。本文用一台退役的 ThinkPad T410(4 核 CPU、8GB 内存)跑起 Woodpecker,把月度 CI 成本降到 0 元,并彻底摆脱网络依赖。你会看到完整的选型、架构、Gitee 适配补丁与迁移前后对比。

一、为什么是 Woodpecker,不是 Jenkins

GitHub Actions 对开源慷慨,但私有仓库受算力时间和存储配额双重限制;自托管 Runner 又依赖从国内连 GitHub,网络不稳随时瘫痪。国内没有免费云 CI 替代,要么付费要么自建。Jenkins 功能全但太重,老笔记本带不动。

横向对比四种方案:

方案 优点 缺点 适合
GitHub Actions 云 Runner 免维护、全球节点 私有收费、国内网络不稳 海外团队、开源
GitHub 自托管 Runner 可控、免费 需网络隧道、连 GitHub 不稳 有稳定海外服务器
Jenkins 功能全、生态大 内存大、Java 重 大型团队、有运维
Woodpecker 自托管 极轻量、Go 单二进制、低资源 社区版精简、Gitee 需补丁 旧硬件、个人/小团队

T410 这种老设备,Jenkins 连启动都吃力;Woodpecker 的 Server 是 Go 单二进制,内存通常 <100MB,刚好压在运行门槛上。

二、架构:构建与发布分离

四个角色:

所有主机在内网、无公网暴露。Gitee Webhook 无法反向访问内网,所以 CI 触发不靠 Webhook,而靠内部脚本定时轮询 Gitee 变更,再调用 Woodpecker API 主动触发流水线。

Woodpecker Agents 按标签路由构建任务

四条设计原则:内网部署、构建与发布分离、敏感信息全走 Secrets、Gitee 为源头 GitHub 为镜像。

三、关键配置:Secrets、Job 与 Agent 路由

Secrets 在仓库设置界面添加,运行时注入,可按分支/标签做变量级权限控制,避免 PR 泄露令牌。

Woodpecker Secrets 配置界面

Job 支持矩阵构建与缓存加速:构建阶段由 Windows / macOS Agent 并行,打包发布由 Linux Agent 汇总。

Woodpecker Job 多平台构建配置

Woodpecker 仓库状态与触发器配置

Agent 用标签路由:windows 接 Windows/OHOS/Linux 构建,macos 接 macOS/iOS/Android/WASM 构建,linux 只做打包发布。

四、让 Woodpecker 支持 Gitee

社区版原生只支持 GitHub、GitLab、Bitbucket。我们基于官方仓库打了补丁,新增 Gitee 作为 SCM:注册 OAuth2 回调与 Webhook 解析、适配 Gitee 的 Push / Pull Request 事件格式、修正镜像同步时的分支标签结构。补丁已开源在 KylinLabAI/woodpecker。

部署五步:拉取镜像或源码编译 → 配置 Gitee OAuth2(Client ID / Secret)→ 添加 Gitee 仓库授权 → 编写内部触发脚本 → 补全 Secrets。

五、收益:最贵的是确定性

指标 GitHub Actions Woodpecker 自托管
月度成本 私有仓库按分钟计费 0 元
网络稳定性 国内频繁超时 内网拉取 <50ms
单次构建 平均 8 分钟 构建 3–4 分钟 + 发布 1 分钟
存储焦虑 频繁清理 本地按需管理

省下的钱是次要的,真正值钱的是确定性——CI 不再因 GitHub 网络波动失败,也不再因配额耗尽中断发布。

六、避坑提醒


总结与延伸阅读

完整补丁与示例配置见 KylinLabAI/woodpecker。如果你在旧硬件上跑 CI 踩过坑,欢迎在评论区聊聊。

📖 Read in English

← Back to all articles