瓦力 walle 介绍与选型指南

瓦力 walle(meolu/walle-web)开源代码发布平台的定位、架构原理、版本现状(v2.0.1,2021-03 停更)与 Jenkins/Spug 量化选型对比。

瓦力 walle持续交付自托管2026/10/25

瓦力 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

关键设计有两点:

  1. 原子软链切换:对外服务的路径(target_root,如 /srv/www/demo-web)是一个软链接,ln -sfn 先指向 current-tmp-N 再 mv -fT 原子改名,切换瞬间完成、可秒级回滚;
  2. 版本目录即备份: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.1shields.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约 12kshields.io github/stars 徽章,2026-10-25 查询
Open Issues385shields.io github/issues 徽章,2026-10-25 查询
许可证Apache-2.0shields.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.1JenkinsSpug
定位代码发布平台通用 CI/CD 自动化服务器轻量运维平台(发布/主机/监控/任务)
许可证Apache-2.0MITAGPL-3.0
技术栈Python 2 + Flask + VueJava + Spring BootPython + 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 停更带来的安全与兼容风险。

五、适用与不适用场景

适合:

  1. PHP、静态站点、脚本类应用的多机发布——tar 分发 + 软链切换的模式天然契合;
  2. 发布需要审批留痕的合规场景(上线单 + 记录表逐命令留档);
  3. 发布频率不极端(分钟级即可)的内部系统,无需制品库与流水线编排。

不适合:

  1. Kubernetes 原生发布(应使用 Helm/ArgoCD/Flux 等 GitOps 工具链);
  2. 需要在发布中运行复杂构建、测试矩阵的场景(walle 只做分发与切换);
  3. 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 命令详解》。

本系列文章:

  1. 《walle v2.0.1 Docker Compose 部署指南》——三服务编排、初始化与端到端发布验证;
  2. 《walle v2.0.1 配置参数详解》——环境变量、项目字段、钩子与通知配置;
  3. 《walle v2.0.1 常用 CLI 命令详解》——admin.sh 六大子命令与运维排障。

七、风险与安全提示

  1. 项目停更:上游最后提交为 2021 年 3 月,建议以「自维护 fork + 内网部署」的方式使用,关注依赖漏洞通告;
  2. Python 2 已 EOL:2.x 技术栈锁定 Python 2.7(2020 年 1 月起不再维护),不建议暴露公网;
  3. 默认口令:初始化后的超级管理员为 super@walle-web.io,默认口令 Walle123(本站实测可登录),首次登录后必须立即修改;
  4. 内置邮箱凭据:walle/config/settings.py 与 settings_prod.py 中硬编码了项目作者的示例邮箱 SMTP 配置,接入自有通知前应替换为自己的 SMTP 账号,切勿沿用;
  5. SSH 算法兼容:内置 paramiko 2.4.2 仅支持 ssh-rsa 签名,与 OpenSSH 8.8+ 目标机对接时需在目标机放行该算法(详见部署指南排障一节)。