简介
我有很多需要自动化的任务,有的是兴趣爱好,有的是工作,比如:
- 自动检测家庭宽带出口地址,并更新DNS解析
- 自动发布博客
- 勒索软件源变化监控和通知
- 每周自动统计个人财务数据,并发送报告
针对这些任务管理,我有两个需求:
- 要有一个中心化的平台,集中管理
- 平台有Web管理界面,便于查看和操作
过去的方案
最开始,当然用的是Cron,但是当我的任务数量和触发方式越来越多的时候,这种方法就不再适用了。
之后,自己写了一个Django的APP,使用Celery来定时触发任务,相比Cron来说,有了Web管理界面;但是有一个很大的问题,Django不支持Hot Reload,每次新加任务都需要重新部署,使用起来也比较麻烦,而且要自己维护一个应用,也很花费时间和精力。
不得已,只能重新寻找新的办法。
新的方案选择
首先,不考虑我的个人需求,单单针对自动化任务,有哪些可选的方案?
经过大量的搜索和整理,我找到了一批工具:
- Cron
- Systemd Timer
- Argo
- GitLab CI/CD
- GitHub CI/CD
- Jenkins
- n8n
首先,Cron绝对是最经典的方案,也是最古老的定时任务管理器;但是缺点也很明显,不够现代化,主要在于只有CLI,而没有GUI。Systemd Timer也是类似的情况,不必多说。
Argo其实是我比较中意的方案,我感兴趣的点,不是它对于我的实用性,而是Argo是基于K8S的;但是最终由于Argo太“重”了,我还是没有选择它。
GitLab CI/CD,GitHub CI/CD,Jenkins也是可以考虑的方案,但是这些方案的出发点,是基于Git仓库,用于持续集成的。
n8n是我最后采用的方案,n8n是Zapier的替代品,有如下功能:
- 可视化流程管理,每个节点是一个步骤,数据在节点之间流动
- 像编程语言一样,有流控制,包括顺序结构,条件结构,循环结构
- 大量的第三方应用集成,包括商业的和开源的,比如:Telegram,Twitter,Google,NocoDB,Minio,Gotify等
- 支持使用Shell,JavaScript和Python脚本
- 多种流程触发方式:包括传统的Cron定时,接收到Webhook触发,表单提交触发,手动触发,收到邮件触发
总结
n8n已经用了半年多了,我现在有20多个流程,任务状态和结果会发送到Gotify,确保我能够实时跟踪任务运行情况。这套流程目前非常完美,解决了我对于自动化流程的需求。