Windmill 支持 GitOps 流程——所有脚本和工作流都可以通过 Git 进行版本管理。本文介绍一种简化的个人/小团队工作流:本地开发,通过
wmillCLI 同步到 Windmill,手动管理 Git 仓库。
1. GitOps 简介 链接到标题
GitOps 是一种将 Git 作为基础设施和应用程序配置单一事实来源的运维模式。其核心思想是:
- 所有配置存储在 Git 仓库中
- 任何变更都通过 Git 流程(commit、PR、merge)进行
- Git 仓库是唯一的真实来源
Windmill 的 GitOps 支持有多种模式,本文介绍一种简化的轻量级工作流,适合个人或小团队使用:
本地开发 → wmill sync push → Windmill 生效 → 手动 git push
2. 工作流程 链接到标题
2.1 流程图 链接到标题
flowchart LR
A[本地开发
windmill-gitops-demo] -->|wmill sync push| B[Windmill
Workspace] B -->|脚本生效| C[MCP Server] A -->|git push| D[GitHub Repo] subgraph OpenCode O[OpenCode Agent] end O -->|MCP 调用| C C -->|执行结果| O style A fill:#e3f2fd,stroke:#1565c0 style B fill:#e8f5e9,stroke:#2e7d32 style D fill:#fff3e0,stroke:#e65100 style O fill:#f3e5f5,stroke:#6a1b9a
windmill-gitops-demo] -->|wmill sync push| B[Windmill
Workspace] B -->|脚本生效| C[MCP Server] A -->|git push| D[GitHub Repo] subgraph OpenCode O[OpenCode Agent] end O -->|MCP 调用| C C -->|执行结果| O style A fill:#e3f2fd,stroke:#1565c0 style B fill:#e8f5e9,stroke:#2e7d32 style D fill:#fff3e0,stroke:#e65100 style O fill:#f3e5f5,stroke:#6a1b9a
2.2 关键区别 链接到标题
| 对比项 | Windmill Git Sync | 本文方案 |
|---|---|---|
| 配置方式 | Windmill 自动同步到 Git | 手动 git push |
| 触发方式 | Git 提交自动触发 Windmill 部署 | 需要手动执行 wmill sync push |
| 复杂度 | 高(需要配置 Git 连接) | 低(仅需 CLI) |
| 适用场景 | 团队协作、自动化流水线 | 个人/小团队快速开发 |
3. 环境准备 链接到标题
3.1 安装 wmill CLI 链接到标题
npm install -g windmill
3.2 配置工作空间 链接到标题
# 添加 Windmill 服务器
wmill workspace add https://<windmill-host>:3900
# 输入 Workspace ID 和 Token
4. 初始化项目 链接到标题
4.1 创建 GitHub 仓库 链接到标题
在 GitHub 创建一个空仓库 windmill-gitops-demo,克隆到本地:
git clone https://github.com/MarshalW/windmill-gitops-demo.git
cd windmill-gitops-demo
4.2 初始化 wmill 项目 链接到标题
wmill init
这会生成 wmill.yaml 配置文件。
4.3 wmill.yaml 配置说明 链接到标题
defaultTs: bun
includes:
- f/** # f/ = folder(共享脚本),u/ = user(用户私有脚本)
excludes: []
skipVariables: true
skipSecrets: true
路径前缀说明:
f/- folder(共享脚本,团队可用)u/- user(用户私有脚本,仅自己可用)
5. 编写 Python 脚本 链接到标题
5.1 创建脚本文件 链接到标题
在 f/demo/ 目录下创建 greeting.py:
import time
def main(name: str) -> str:
"""传入姓名,等待5秒后返回问候语
Args:
name: 姓名
Returns:
问候语字符串
"""
time.sleep(5)
return f"你好,{name}!欢迎使用 Windmill + OpenCode。"
5.2 目录结构 链接到标题
windmill-gitops-demo/
├── wmill.yaml
└── f/
└── demo/
└── greeting.py
6. 同步到 Windmill 链接到标题
6.1 推送到 Windmill 链接到标题
wmill sync push
这会将本地 f/** 下的所有脚本同步到 Windmill 工作空间。
6.2 验证同步结果 链接到标题
登录 Windmill Web UI,进入 Scripts 页面,应该能看到 f/demo/greeting 脚本。
7. 创建 Windmill MCP URL 链接到标题
7.1 生成 Token 链接到标题
- 在 Windmill 中,点击右上角头像 → Account Settings
- 进入 Tokens 标签页
- 点击 Generate Token,选择 Generate MCP URL 选项
- 在 Scope 配置中选择
all scripts/flows,这样该 Token 有权访问工作区下所有脚本和流程。如果需要更细粒度的控制,可以选择custom选项分别选择 script、flow、app 等 - 复制生成的 MCP URL,格式如下:
http://<windmill-host>:3900/api/mcp/w/default/mcp?token=<token>
7.2 MCP URL 说明 链接到标题
- Host:Windmill 服务器地址
- Port:3900(Caddy 反向代理端口)
- Workspace:
default - Token:认证令牌
8. OpenCode 配置 MCP 链接到标题
在 OpenCode 配置文件中(~/.config/opencode/opencode.json)添加:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"windmill": {
"type": "remote",
"url": "http://<windmill-host>:3900/api/mcp/w/default/mcp?token=<token>",
"enabled": true
}
}
}
8.1 验证配置 链接到标题
opencode mcp list
正常输出:
┌─ MCP Servers ──────────────────
│
● ✓ windmill connected
│ http://<windmill-host>:3900/api/mcp/w/default/mcp
│
└─ 1 server(s)
9. 同步调用验证 链接到标题
配置完成后,在 OpenCode 对话框中直接调用 Windmill 脚本:
运行 f/demo/greeting 脚本,输入 name 为 "张三"
由于脚本包含 5 秒延迟,OpenCode 会等待执行结果返回:
你好,张三!欢迎使用 Windmill + OpenCode。
10. 提交到 GitHub 链接到标题
每次修改脚本后,完整流程:
# 1. 推送到 Windmill
wmill sync push
# 2. 提交到 Git
git add .
git commit -m "feat: 更新 greeting 脚本"
git push
11. 总结 链接到标题
通过这种简化的工作流,我们可以:
- 本地开发:使用熟悉的编辑器编写脚本
- 版本控制:通过 Git 管理脚本变更
- 快速同步:使用
wmill sync push一键部署到 Windmill - AI 集成:OpenCode MCP 无缝调用 Windmill 脚本
这种模式特别适合个人开发者和小团队场景,兼顾了本地开发的便利性和 Git 版本控制的优势。