Probius:一个功能强大的自定义任务系统
断更的这些日子,我又折腾了一个轮子,文末参考源码
大约在一年半以前写过一篇文章『探秘varian:优雅的发布部署程序』,里边有讲到我们采用类似lego的模块化方式来构建CICD的流程,虽能满足我们的需求,但终究需要编写代码,使用成本有点高,不够友好。近段时间终于下定决心将其重构,只为带来更好的使用体验,于是便有了这个项目Probius
Probius为游戏星际争霸里的角色,是一只充满好奇心的星灵探测机,取此名字的意思也是希望用户能够在这个系统中充分发挥想象,借助此系统实现各种自定义的功能,覆盖更多的运维场景
设计思路
Probius由三个关键词构成:命令、模板、任务
命令:为系统中的最小粒度,可以是一个具体的linux命令,或者是一个脚本都可以
模板:模板为一组命令的集合
任务:模板为静态的定义,而任务就是模板的执行,执行一个任务实际上就是去执行了一个模板内的所有命令
整体思想跟varian一样,但不同的是可以仅仅通过web端的配置,就能实现各种各样的功能,下边具体介绍下如何配置的
页面配置
新建命令,在这个页面可以创建命令或者脚本

如果是单纯的命令,直接在命令输入框填写即可,如果是需要执行脚本,则点击脚本之后,会额外多出一个脚本输入框,填写要执行的脚本

理论上不限制脚本的类型,可以是shell、python或者go之类的,前提是系统上有脚本的运行环境,当命令或者脚本有参数的时候可以在参数列写上参数名称,然后在最终执行任务的时候需要传递具体参数的值过来
在命令执行完成后,会根据命令的返回状态也就是$?的值来判断命令是否执行成功,当$?为0是表示执行成功,否则表示执行失败,如果是执行的脚本时,需要在脚本最后明确脚本返回状态,shell脚本可以在脚本执行成功时通过exit指定退出状态,例如
ls /ops-coffee.cn &&\
exit 0 ||\
exit 2
而对于python脚本则可以借助sys.exit这样写
import sys
if 'www' in 'ops-coffee.cn':
sys.exit(0)
else:
sys.exit(3)
其他语言类似
模板的创建分为几步,先创建一个模板

然后给模板添加任务

主要为选择任务、确定执行顺序、选择执行主机以及执行用户,添加完成后可以在模板详情页面看到关联的命令

模板定义了一个完整的任务流程,定义完成后就可以执行任务了,执行任务界面写的比较简单

这界面主要给运维人员使用,定义任务名称、所要执行的模板ID、以及参数,支持定时执行或者周期执行,只需要加上crontab参数即可,除了可以立即执行任务外,还可以将次任务保存为常用任务,后续在常用任务页面可以直接执行

这个功能主要方便其他非运维人员使用本系统,同时也支持针对任务设置权限,可以将权限设置给某个用户组,那么则只有这个组内的成员可以看到并执行任务了

任务执行后可以通过任务历史查看任务执行详情,在这个页面可以清晰的看到任务执行到了哪一步,是成功还是失败

可以点击每一步任务后边的日志查看实时日志输出

写在最后
如果你用过我们开源的一站式DevOps平台CODO的话,会发现这个系统跟CODO的TASK模块非常像,是的没错,这个设计与CODO的TASK如出一辙,但开源的CODO任务模块要更加强大,例如支持分组执行、支持任务重做、支持人工干预等等

TASK的源码在这里:https://github.com/opendevops-cn/codo-task,感兴趣可以自行阅读部署,需要注意的是CODO为微服务架构,单独安装TASK是无法正常运行的,具体部署方法参考官方文档
Probius:一个功能强大的自定义任务系统的更多相关文章
- 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观
整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049
- WebLech是一个功能强大的Web站点下载与镜像工具
WebLech是一个功能强大的Web站点下载与镜像工具.它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为.WebLech有一个功能控制台并采用多线程操作. http://sour ...
- cURL 是一个功能强大的PHP库。
使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并把 ...
- SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件
SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件. Why? 下拉刷新这样的控件.想必大家用的太多了,比方使用非常多的XListView等. 近期.项目中非常多列表都 ...
- 简单使用Laravel-admin构建一个功能强大的后台管理
Laravel-admin可以快速构建一个功能强大的后台,方便快速开发. 以下内容记录简单使用Laravel-admin,以及遇到小错误的解决方法. Laravel-admin 依赖以下环境 需要提前 ...
- iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
在上一篇博客中<iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流>,自定义瀑布流的列数,Cell的外边距,C ...
- 使用EF+ASP.NET MVC+Bootstrap开发一个功能强大的问卷调查系统
功能简介 支持七大题型 下拉选择题.单选题.多选题.填空题.数字题.问答题.组合/矩阵题(单选组合.多选组合.填空组合.数字组合) 题库支持 每个问卷都要设置姓名.年龄.性别.学历,怎么办?题库帮您轻 ...
- Arduino Tian开发板:一个功能强大的天气预报中心
每天都在出现新的连接设备. Arduino携手云平台一起加入这场战斗,于是出现了一个新的挑战者 - Arduino Tian! 使用python和经典Arduino框架,本教程将引导您将您的Ardui ...
- opentwebst一个ie自动化操作测试软件-功能强大
opentwebst一个ie自动化操作测试软件-功能强大 一个ie自动化操作测试软件,自动根据操作记录脚本.生成vbs,js和其他脚本语言,用来运行 里面包含了两个东西: 1.脚本操作自动记录,记录下 ...
随机推荐
- ExtJS动态改变字体颜色
为按钮设置文本属性,用标签包裹变色. //pButton为按钮IDExt.getCmp('pButton').setText('<span style="color:#FF0000;& ...
- 解决docker创建的elasticsearch-head容器不能连接elasticsearch等问题
在使用docker创建elasticsearch-head容器去连接elasticsearch的时候,容易出两个问题 1.不能连接elasticsearch 修改elasticsearch.yml文件 ...
- Istio Polit-agent & Envoy 启动流程
开篇 通过上一篇 Istio Sidecar注入原理 文章可以发现,在应用提交到kubernate部署时已经同时注入了Sidecar应用. 细心的话应该还可以发现,除了注入了istio-proxy应用 ...
- 飞机调度 Now or Later? LA 3211 (2-SAT问题)
洛谷题目传送门 题目描述 有n架飞机需要着陆.每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种.第i架飞机的早着陆时间为Ei,晚着陆时间为Li,不得在其他时间着陆.你的任务是为这些 ...
- pandas删除DataFrame中任意字段等于'null'字符串的行
删除df中任意字段等于'null'字符串的行: df=df.astype(str)#把df所有元素转为str类型 df=df[df['A'].isin(['null','NULL'])] #找出df的 ...
- abp(net core)+easyui+efcore实现仓储管理系统——出库管理之一(四十九)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- Rocket - diplomacy - DUEB参数模型分析
https://mp.weixin.qq.com/s/533bJxcPRgO4W2gf_OEhEw 分析DUEB参数模型中各种参数类型的可能性. 1. 节点类型 根据参数的传播方向,可 ...
- jchdl - RTL Event
https://mp.weixin.qq.com/s/P9uoJwIYdM-mbiR9WCtJCg hardware modeling基于事件驱动模型,RTL中定义了多种事件. jchdl 参考了 ...
- 一个request请求然后锁定等待异步接口处理结果
private ConcurrentHashMap<String, Locker> relation = new ConcurrentHashMap<String, Locker&g ...
- ASP.NET通过更改Url进行页面传值
这里,通过假数据,手动创建的一个类,然后创建的一个集合,放入下拉框,选好值以后,点确定 会在另一个页面产生对应的id,有不懂的欢迎评论 创建一个类: using System; using Syste ...