自动化任务解决方案

利用n8n管理自动化任务。

简介

我有很多需要自动化的任务,有的是兴趣爱好,有的是工作,比如:

  • 自动检测家庭宽带出口地址,并更新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,确保我能够实时跟踪任务运行情况。这套流程目前非常完美,解决了我对于自动化流程的需求。

使用 Hugo 构建
主题 StackJimmy 设计