5分钟上手Windmill:多语言脚本(Python/TS/Go/Bash)零代码构建自动化工作流

5分钟上手Windmill:多语言脚本(Python/TS/Go/Bash)零代码构建自动化工作流

【免费下载链接】windmill Open-source developer platform to turn scripts into workflows and UIs. Fastest workflow engine (5x vs Airflow). Open-source alternative to Airplane and Retool. 【免费下载链接】windmill 项目地址: https://gitcode.com/GitHub_Trending/wi/windmill

Windmill是一个开源开发者平台,能够将脚本转换为工作流和用户界面。作为最快的工作流引擎(比Airflow快5倍),它是Airplane和Retool的开源替代品,支持Python、TypeScript、Go、Bash等多种脚本语言,帮助团队快速构建内部工具和自动化流程。

为什么选择Windmill?

传统的工作流工具往往存在学习曲线陡峭、执行速度慢或扩展性差等问题。Windmill通过创新的架构设计和多语言支持,解决了这些痛点:

  • 极速性能:比Airflow快5倍的工作流引擎,单任务启动延迟低至50ms
  • 多语言支持:原生支持Python、TypeScript、Go、Bash等多种编程语言
  • 自动生成UI:脚本参数自动转换为交互式界面,无需前端开发
  • 灵活部署:支持Docker Compose、Kubernetes等多种部署方式
  • 安全沙箱:采用Google nsjail技术隔离执行环境,确保脚本安全运行

Windmill架构图

快速开始:5分钟部署Windmill

Docker Compose一键部署

Windmill提供了简单的部署方式,只需三条命令即可在本地启动完整环境:

curl https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml -o docker-compose.yml
curl https://raw.githubusercontent.com/windmill-labs/windmill/main/Caddyfile -o Caddyfile
curl https://raw.githubusercontent.com/windmill-labs/windmill/main/.env -o .env

docker compose up -d

访问http://localhost,使用默认账号admin@windmill.dev/changeme登录,即可开始使用。

Windmill登录界面

多语言脚本实战指南

Python脚本:数据处理自动化

Windmill对Python提供了完善支持,包括类型提示解析、依赖管理和结果可视化。以下是一个处理CSV数据的示例:

import pandas as pd
from wmill import get_resource

def main(csv_url: str):
    # 从URL加载CSV数据
    df = pd.read_csv(csv_url)
    
    # 数据处理:计算平均值
    avg_value = df['value'].mean()
    
    # 获取数据库资源(在Windmill UI中预先配置)
    db = get_resource("postgres/main")
    
    # 写入结果到数据库
    db.execute("INSERT INTO metrics (date, value) VALUES (NOW(), %s)", [avg_value])
    
    return {"average": avg_value, "row_count": len(df)}

将此脚本上传到Windmill后,系统会自动解析参数并生成如下UI界面:

Python脚本自动生成的UI

TypeScript脚本:API集成与数据转换

TypeScript脚本支持通过npm导入任意依赖,并与Windmill的资源系统无缝集成:

import * as wmill from "windmill-client";
import axios from "axios@1.6.0";

// 定义资源类型
type SlackWebhook = {
  url: string;
};

export async function main(
  slack_webhook: SlackWebhook,
  message: string,
  priority: "low" | "medium" | "high" = "medium"
) {
  // 获取环境变量
  const user = process.env["WM_EMAIL"];
  
  // 发送Slack消息
  await axios.post(slack_webhook.url, {
    text: `[${priority.toUpperCase()}] ${user}: ${message}`
  });
  
  // 存储执行状态
  await wmill.setState({ last_sent: new Date().toISOString() });
  
  return { success: true, timestamp: Date.now() };
}

TypeScript脚本在Windmill中使用Deno和Bun运行时,确保了高效的执行性能和广泛的库支持。

TypeScript脚本编辑界面

Go脚本:高性能后端任务

Go脚本适合需要高性能处理的场景,Windmill会自动处理依赖管理和参数解析:

package main

import (
	"context"
	"fmt"
	"net/http"
	"time"
	
	"github.com/windmill-labs/windmill-go-client/v2"
)

type Args struct {
	Url       string        `json:"url"`
	TimeoutMs int           `json:"timeout_ms"`
	Method    string        `json:"method"`
}

func main(ctx context.Context, args Args) (map[string]interface{}, error) {
	// 设置超时
	timeout := time.Duration(args.TimeoutMs) * time.Millisecond
	client := http.Client{Timeout: timeout}
	
	// 发送HTTP请求
	req, err := http.NewRequest(args.Method, args.Url, nil)
	if err != nil {
		return nil, err
	}
	
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	
	// 返回结果
	return map[string]interface{}{
		"status":  resp.StatusCode,
		"headers": resp.Header,
	}, nil
}

Go脚本在Windmill中以原生二进制形式执行,特别适合CPU密集型任务和系统级操作。

Bash脚本:系统自动化与DevOps任务

Bash脚本适合简单的系统自动化任务,Windmill提供了完整的环境隔离和资源访问控制:

#!/bin/bash

# 接收参数
BACKUP_DIR=$1
RETENTION_DAYS=$2

# 创建备份目录
mkdir -p "$BACKUP_DIR/$(date +%Y%m%d)"

# 执行数据库备份
pg_dump -h $DB_HOST -U $DB_USER $DB_NAME > "$BACKUP_DIR/$(date +%Y%m%d)/db.sql"

# 压缩备份文件
gzip "$BACKUP_DIR/$(date +%Y%m%d)/db.sql"

# 删除旧备份
find "$BACKUP_DIR" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;

# 返回备份信息
echo "{\"backup_path\": \"$BACKUP_DIR/$(date +%Y%m%d)\", \"files\": $(ls -1q "$BACKUP_DIR/$(date +%Y%m%d)" | wc -l)}"

Bash脚本在Windmill中运行于受限环境,通过环境变量安全地获取敏感信息,避免了硬编码凭证的安全风险。

构建多语言工作流

Windmill的真正强大之处在于能够将不同语言的脚本组合成复杂工作流。以下是一个包含Python数据处理、TypeScript通知和Bash系统操作的完整工作流:

Windmill工作流编辑器

工作流定义采用JSON格式,可以通过UI编辑器或代码方式创建:

{
  "nodes": [
    {
      "id": "fetch_data",
      "type": "script",
      "path": "python/fetch_and_process",
      "args": {
        "source_url": "https://api.example.com/data"
      }
    },
    {
      "id": "send_notification",
      "type": "script",
      "path": "ts/slack_notify",
      "args": {
        "message": "Data processed: {{nodes.fetch_data.output.row_count}} rows",
        "priority": "high"
      },
      "dependencies": ["fetch_data"]
    },
    {
      "id": "backup_files",
      "type": "script",
      "path": "bash/backup",
      "args": {
        "backup_dir": "/data/backups",
        "retention_days": 7
      },
      "dependencies": ["send_notification"]
    }
  ]
}

部署与扩展

Windmill提供了多种部署选项,满足不同规模的需求:

Docker Compose部署

对于小型团队或个人使用,Docker Compose部署最简单:

# docker-compose.yml 示例片段
version: '3'
services:
  windmill:
    image: ghcr.io/windmill-labs/windmill
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/windmill
    depends_on:
      - db
  
  db:
    image: postgres:14
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=windmill
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Kubernetes部署

企业级部署可使用官方Helm图表:

helm repo add windmill https://windmill-labs.github.io/windmill-helm-charts/
helm install windmill windmill/windmill --namespace windmill --create-namespace

Windmill支持自动扩展工作节点,可根据任务负载动态调整资源使用:

Windmill性能基准测试

最佳实践与资源

脚本开发规范

  1. 参数设计:使用清晰的参数名称和类型注解,便于自动生成UI
  2. 错误处理:适当的错误处理和日志记录,便于调试
  3. 资源使用:通过Windmill资源系统管理外部服务连接,避免硬编码凭证
  4. 幂等性设计:确保脚本可以安全重试,适合自动化调度

学习资源

总结

Windmill通过创新的多语言支持和自动化UI生成,极大降低了构建内部工具和自动化工作流的门槛。无论是简单的脚本任务还是复杂的多步骤工作流,Windmill都能提供高效、安全、可扩展的解决方案。

立即通过以下命令开始使用Windmill:

git clone https://gitcode.com/GitHub_Trending/wi/windmill
cd windmill
docker compose up -d

访问http://localhost开始您的自动化之旅!

【免费下载链接】windmill Open-source developer platform to turn scripts into workflows and UIs. Fastest workflow engine (5x vs Airflow). Open-source alternative to Airplane and Retool. 【免费下载链接】windmill 项目地址: https://gitcode.com/GitHub_Trending/wi/windmill

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值