断更的这些日子,我又折腾了一个轮子,文末参考源码

大约在一年半以前写过一篇文章『探秘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:一个功能强大的自定义任务系统的更多相关文章

  1. 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

    整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

  2. WebLech是一个功能强大的Web站点下载与镜像工具

    WebLech是一个功能强大的Web站点下载与镜像工具.它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为.WebLech有一个功能控制台并采用多线程操作. http://sour ...

  3. cURL 是一个功能强大的PHP库。

    使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并把 ...

  4. SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件

    SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件. Why? 下拉刷新这样的控件.想必大家用的太多了,比方使用非常多的XListView等. 近期.项目中非常多列表都 ...

  5. 简单使用Laravel-admin构建一个功能强大的后台管理

    Laravel-admin可以快速构建一个功能强大的后台,方便快速开发. 以下内容记录简单使用Laravel-admin,以及遇到小错误的解决方法. Laravel-admin 依赖以下环境 需要提前 ...

  6. iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流

    在上一篇博客中<iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流>,自定义瀑布流的列数,Cell的外边距,C ...

  7. 使用EF+ASP.NET MVC+Bootstrap开发一个功能强大的问卷调查系统

    功能简介 支持七大题型 下拉选择题.单选题.多选题.填空题.数字题.问答题.组合/矩阵题(单选组合.多选组合.填空组合.数字组合) 题库支持 每个问卷都要设置姓名.年龄.性别.学历,怎么办?题库帮您轻 ...

  8. Arduino Tian开发板:一个功能强大的天气预报中心

    每天都在出现新的连接设备. Arduino携手云平台一起加入这场战斗,于是出现了一个新的挑战者 - Arduino Tian! 使用python和经典Arduino框架,本教程将引导您将您的Ardui ...

  9. opentwebst一个ie自动化操作测试软件-功能强大

    opentwebst一个ie自动化操作测试软件-功能强大 一个ie自动化操作测试软件,自动根据操作记录脚本.生成vbs,js和其他脚本语言,用来运行 里面包含了两个东西: 1.脚本操作自动记录,记录下 ...

随机推荐

  1. 聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo

    最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...

  2. html文本超出加省略号

    如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...

  3. js 三级联动 1

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. noip2019(普及组) 公交换乘 (不剪枝见祖宗题)

    luogu题目传送门 其实就是一道普普通通的模拟题,但是1e5的数据让很多不看数据范围和不加优化的小伙伴们莫名其妙的T了.(包括我) 因此,论减枝的重要性!! 于是乎,最重要的一点也就出来了.早就过期 ...

  5. StackOverflow 创始人关于如何高效编程的清单.md

    这是 StackOverflow 联合创始人 Jeff Atwood 注释的十戒.程序员普遍有很强的自尊心,都应该看看本文,打印下来时刻提醒自己. "无我编程"发生在开发阶段,表现 ...

  6. Rocket - tilelink - first

    https://mp.weixin.qq.com/s/0nzkV4K1osNEQzrtITYxmw   介绍Edges中first/last/done的实现.   ​​   1. firstlastH ...

  7. 文件包含漏洞(file inclusion)

    文件包含漏洞原理:(php) 是指当服务器开启allow_url_include选项的时候,通过php某些特性函数.如include().include_once().require().requir ...

  8. MethodHandle(方法句柄)系列之二:方法句柄的简单使用

     二话不说,上代码 /** * * @author LiuYeFeng<897908343@qq.com> * @date 2015年4月8日 下午10:41:13 * @CopyRigh ...

  9. Java实现 LeetCode 747 至少是其他数字两倍的最大数(暴力)

    747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 ...

  10. Java实现 LeetCode 715 Range 模块(选范围)

    715. Range 模块 Range 模块是跟踪数字范围的模块.你的任务是以一种有效的方式设计和实现以下接口. addRange(int left, int right) 添加半开区间 [left, ...