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.脚本操作自动记录,记录下 ...
随机推荐
- Excel日期转换为PHP时间戳
PHP 的时间函数是从1970-1-1日开始计算的,单位是秒数.但是 EXCEL的是从1900-1-1日开始算的单位是天数. 如果只计算1970以后的时间的话,就好处理了. 先获得 EXCEL中 19 ...
- [Abp vNext 入坑分享] - 8.Redis与Refit的接入
前言 本章结束之后,这个abp vnext系列算是初步完结了,基础的组件都已经接入了.如果各位还需要其它的组件的话,可以自己按需要进行接入使用.其实这个只是一个基础的框架,可以自己根据需要进行变通的. ...
- linux添加策略路由python脚本(待完善)
#! _*_ coding:utf-8 _*_ import os,sys,re,fileinput,socket device_list = [] ip_list = [] ip_end = [] ...
- 【JavaScript数据结构系列】02-栈Stack
[JavaScript数据结构系列]02-栈Stack 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识栈结构 栈是非常常用的一种数据结构,与数组同属线性数据结构,不同于数组的 ...
- webpack@next webpack-multi-page-cli 多页脚手架2.0
根据自己的经验和想法,对原有的1.x版本进行的大版本的升级.在实际工作中,能结合的应用场景会更加多元化. github:https://github.com/pomelott/webpack-mult ...
- 微信小程序语音同步智能识别的实现案例
目录 一.背景 二.同声传译插件介绍 1. 微信小程序后台添加插件 2. 微信小程序启用插件 三.语音同步转换的前端实现 1.界面UI与操作 2.代码实现 四.后端SpringBoot实现语音文件上传 ...
- 分布式项目开发-springmvc.xmll基础配置
基础步骤: 1 包扫描 2 驱动开发 3 视图解析器 4 文件上传解析器 5 拦截器 6 静态资源 <beans xmlns="http://www.springframework.o ...
- 北醒激光模块TFmini——STM32驱动程序(STM32F103C8T6)
背景:该激光模块属于精度比较高的激光测距模块,使用方便. 代码地址:https://github.com/W-yt/YuTian_Pro/tree/master/TFMini_Driver 平台: 硬 ...
- Web-从Java Request对象到HTTP协议
https://mp.weixin.qq.com/s/PjcA22STEDGwRxVQweObQQ Java Web中的Request对象是哪里来的?Response对象的角色是什么? Java We ...
- ERROR: ...hbase.PleaseHoldException: Master is initializing
同学升级HBase后遇到这个问题,hbase shell,status就可以看到 ERROR: -hbase.PleaseHoldException: Master is initializing 解 ...