瓦力 walle 介绍与选型指南
瓦力 walle(meolu/walle-web)开源代码发布平台的定位、架构原理、版本现状(v2.0.1,2021-03 停更)与 Jenkins/Spug 量化选型对比。
瓦力 walle 介绍与选型指南
walle(瓦力)是一款开源的多环境、多项目代码发布平台,围绕「上线单」提供申请、审核、发布、实时日志与秒级回滚的完整闭环。本文基于官方仓库与源码实测数据(查询日期 2026-10-25),给出架构解析、版本现状与量化选型建议。
一、walle 是什么
walle(瓦力)由开发者 meolu(wushuiyong)发起,主仓库为 GitHub meolu/walle-web,采用 Apache-2.0 许可证,在 shields.io 徽章数据中显示约 12k Stars(查询日期 2026-10-25)。项目始于 2015 年,2.x 版本对 1.x 做了全面重写,官方文档站为 walle-web.io。
它不是持续集成(CI)工具,而是一款专注「代码发布」环节的部署系统:CI 产出的代码由它负责分发到目标服务器并完成版本切换。核心能力包括:
| 能力 | 说明 |
|---|---|
| 多环境 / 多项目 | 以「空间 → 环境 → 服务器 → 项目」的层级管理发布对象 |
| 上线单机制 | 每次发布都是一张上线单:选分支、选 commit、填变更说明 |
| 发布审核 | 项目可开启上线审核(task_audit),上线单需审批后才能执行 |
| 灰度与多机 | 一张上线单同时发布到多台服务器,可配置保留版本数 |
| 实时日志 | 基于 Flask-SocketIO 的 WebSocket 推送,逐条命令实时回显 |
| 快速回滚 | 版本目录 + 软链接方案,回滚无需重新传输代码 |
| 自定义钩子 | prev_deploy / post_deploy / prev_release / post_release 四个阶段可挂自定义脚本 |
| 通知 | 发布结果可推送钉钉机器人或邮件(notice_type / notice_hook) |
二、工作原理与核心概念
2.1 对象模型
walle 的管理面由五类对象组成(对应数据库表 users、spaces、members、environments、servers、projects、tasks、records):
- 空间(Space):隔离不同团队,用户需切换到某空间后才能操作其中的环境、服务器与项目;
- 环境(Environment):如「测试环境」「生产环境」,一个项目只归属一个环境;
- 服务器(Server):目标机登记信息(主机名/IP、SSH 用户、端口);
- 项目(Project):一次发布的完整定义——git 仓库地址、分支/commit 模式、目标路径、保留版本数、审核开关、钩子脚本、通知方式;
- 上线单(Task):具体某一次发布,记录分支、commit、操作人、状态与执行日志。
2.2 发布流水线(实测命令链)
walle 采用无代理(agentless)架构:管理机通过 SSH(paramiko 2.4.2)连接目标机执行命令,目标机只需运行 sshd 并预置部署公钥。以下为本站实测一次发布时 walle 实际执行的命令序列(取自 records 记录表,路径已按示例项目配置解析):
# 管理机:检出与打包
cd /tmp/walle/codebase/ && cp -rf /tmp/walle/codebase/1 1_3_20261025_092433
cd /tmp/walle/codebase/ && tar zcf /tmp/walle/codebase/1_3_20261025_092433.tgz 1_3_20261025_092433/
# 分发
scp /tmp/walle/codebase/1_3_20261025_092433.tgz root@target-server:/srv/www/demo-releases
# 目标机:解压与软链切换
cd /srv/www/demo-releases && tar zxf 1_3_20261025_092433.tgz
cd /srv/www/demo-releases && ln -sfn /srv/www/demo-releases/1_3_20261025_092433 /srv/www/demo-releases/current-tmp-3
cd /srv/www/demo-releases && mv -fT /srv/www/demo-releases/current-tmp-3 /srv/www/demo-web
# 清理:本地包、目标机旧版本(保留 keep_version_num=5)
cd /srv/www/demo-releases && find ./ -name "1_*" -print | ls -t | tail -n +6 | xargs rm -rf
关键设计有两点:
- 原子软链切换:对外服务的路径(target_root,如
/srv/www/demo-web)是一个软链接,ln -sfn先指向current-tmp-N再mv -fT原子改名,切换瞬间完成、可秒级回滚; - 版本目录即备份:
target_releases(如/srv/www/demo-releases)按1_任务ID_发布时间命名保留历史版本,回滚只是把软链接重新指回上一个版本目录。
2.3 技术架构
| 层 | 技术选型(源码实测,requirements/prod.txt 与 pip 实际版本) |
|---|---|
| 后端 | Python 2.7.16 + Flask 1.0.2 + SQLAlchemy 1.2.14 + gevent 1.3.7 |
| SSH 通道 | paramiko 2.4.2 + invoke 1.2.0(fabric2 内核) |
| 实时日志 | Flask-SocketIO(WebSocket) |
| 代码集成 | GitPython(分支/commit 列表查询、检出) |
| 数据库 | MySQL(utf8mb4),Alembic 迁移 |
| 前端 | Vue 单页应用,由独立 Nginx 托管并反代 /api/ 与 /socket.io/ |
| 部署形态 | 官方提供 Docker Compose 一键编排方案,也可裸机 admin.sh 安装 |
前端 Nginx 将 /api/ 与 /socket.io/(WebSocket 升级头)反代到后端 5000 端口,其余路径走前端静态资源——这一布局决定了部署时后端域名与 WebSocket 的连通性要求。
三、版本与维护现状(2026-10-25 取证)
| 项目 | 数值 | 来源 |
|---|---|---|
| 最新稳定版 | v2.0.1 | shields.io github/v/release 徽章,2026-10-25 查询 |
| 版本发布时间 | 2019 年 4 月 | shields.io github/release-date 徽章,2026-10-25 查询 |
| 最后一次提交 | 2021 年 3 月 | shields.io github/last-commit 徽章,2026-10-25 查询 |
| Stars | 约 12k | shields.io github/stars 徽章,2026-10-25 查询 |
| Open Issues | 385 | shields.io github/issues 徽章,2026-10-25 查询 |
| 许可证 | Apache-2.0 | shields.io github/license 徽章,2026-10-25 查询 |
源码中 walle/config/settings.py 的 VERSION = '2.0.1' 与上述徽章数据一致。必须正视的结论是:walle 2.x 自 2021 年 3 月起已无上游提交,属于停止维护的项目。它依然可用、部署体验完整(本站已实测全流程),但新漏洞不会得到官方修复,选型时需要接受这一前提。
四、量化选型对比
与常见的两类替代品对比:通用 CI/CD 平台 Jenkins、同为轻量运维平台的 Spug。walle 数据为本站实测与官方仓库取证;Jenkins、Spug 数据来自其官方仓库与官网的公开描述(均为定性描述,查询日期 2026-10-25)。
| 维度 | walle 2.0.1 | Jenkins | Spug |
|---|---|---|---|
| 定位 | 代码发布平台 | 通用 CI/CD 自动化服务器 | 轻量运维平台(发布/主机/监控/任务) |
| 许可证 | Apache-2.0 | MIT | AGPL-3.0 |
| 技术栈 | Python 2 + Flask + Vue | Java + Spring Boot | Python + Flask + React |
| 发布模型 | 上线单(选分支/commit → 审核 → 发布) | 任务/Pipeline(Jenkinsfile 即代码) | 发布申请单 |
| 代理方式 | 无代理,SSH 推送 | 主从 agent 架构 | 无代理,SSH 推送 |
| 回滚 | 秒级软链回指旧版本目录 | 依赖插件与制品管理 | 版本目录回退 |
| 审批流 | 内置上线审核 | 需插件 | 内置申请/审核 |
| 实时日志 | WebSocket 逐命令回显 | 控制台输出 | WebSocket |
| 前置依赖 | 目标机 sshd + 部署公钥 + git 仓库 | Java 环境与插件生态 | 目标机 sshd |
| 学习/维护成本 | 低,界面即全部 | 高,插件与 Pipeline 体系复杂 | 低 |
| 维护状态 | 停更(最后提交 2021-03) | 活跃 | 维护缓慢 |
| 资源占用 | 极低(单机 2C4G 可跑) | 中高(JVM) | 低 |
选型结论:
- 选 walle:中小团队、内网 git 仓库、目标机为 Linux、需要「审核 + 灰度 + 秒级回滚 + 实时日志」的开箱即用组合,且团队有能力自行维护 fork(不再期待官方更新);
- 选 Jenkins:需要构建、测试、部署一体化的流水线即代码(Pipeline as Code)、多语言生态与长期社区支持;
- 选 Spug:想要发布之外还附带主机巡检、监控告警、计划任务的轻量运维全家桶;
- 不选 walle:目标平台是 Kubernetes、需要 CI/CD 一体化、或团队无法承担 Python 2 停更带来的安全与兼容风险。
五、适用与不适用场景
适合:
- PHP、静态站点、脚本类应用的多机发布——tar 分发 + 软链切换的模式天然契合;
- 发布需要审批留痕的合规场景(上线单 + 记录表逐命令留档);
- 发布频率不极端(分钟级即可)的内部系统,无需制品库与流水线编排。
不适合:
- Kubernetes 原生发布(应使用 Helm/ArgoCD/Flux 等 GitOps 工具链);
- 需要在发布中运行复杂构建、测试矩阵的场景(walle 只做分发与切换);
- Windows 目标机(执行链依赖 shell、rsync 类工具与 sshd)。
六、部署路径与文档导航
walle 官方提供两条安装路径:基于 Docker Compose 的一键编排(推荐,见《walle v2.0.1 Docker Compose 部署指南》),以及裸机 admin.sh 安装(init 脚本自动区分 CentOS/Ubuntu 依赖)。部署后的配置项全解见《walle v2.0.1 配置参数详解》,日常维护与升级命令见《walle v2.0.1 常用 CLI 命令详解》。
本系列文章:
- 《walle v2.0.1 Docker Compose 部署指南》——三服务编排、初始化与端到端发布验证;
- 《walle v2.0.1 配置参数详解》——环境变量、项目字段、钩子与通知配置;
- 《walle v2.0.1 常用 CLI 命令详解》——admin.sh 六大子命令与运维排障。
七、风险与安全提示
- 项目停更:上游最后提交为 2021 年 3 月,建议以「自维护 fork + 内网部署」的方式使用,关注依赖漏洞通告;
- Python 2 已 EOL:2.x 技术栈锁定 Python 2.7(2020 年 1 月起不再维护),不建议暴露公网;
- 默认口令:初始化后的超级管理员为
super@walle-web.io,默认口令Walle123(本站实测可登录),首次登录后必须立即修改; - 内置邮箱凭据:
walle/config/settings.py与settings_prod.py中硬编码了项目作者的示例邮箱 SMTP 配置,接入自有通知前应替换为自己的 SMTP 账号,切勿沿用; - SSH 算法兼容:内置 paramiko 2.4.2 仅支持 ssh-rsa 签名,与 OpenSSH 8.8+ 目标机对接时需在目标机放行该算法(详见部署指南排障一节)。