Windmill 支持 GitOps 流程——所有脚本和工作流都可以通过 Git 进行版本管理。本文介绍一种简化的个人/小团队工作流:本地开发,通过 wmill CLI 同步到 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

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 链接到标题

  1. 在 Windmill 中,点击右上角头像 → Account Settings
  2. 进入 Tokens 标签页
  3. 点击 Generate Token,选择 Generate MCP URL 选项
  4. 在 Scope 配置中选择 all scripts/flows,这样该 Token 有权访问工作区下所有脚本和流程。如果需要更细粒度的控制,可以选择 custom 选项分别选择 script、flow、app 等
  5. 复制生成的 MCP URL,格式如下:
http://<windmill-host>:3900/api/mcp/w/default/mcp?token=<token>

7.2 MCP URL 说明 链接到标题

  • Host:Windmill 服务器地址
  • Port:3900(Caddy 反向代理端口)
  • Workspacedefault
  • 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 版本控制的优势。