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

大约在一年半以前写过一篇文章『探秘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. springmvc数据处理-中文乱码

    首先解决中文乱码 通过mvc过滤器解决,在web.xml中配置 <filter> <filter-name>CharacterEncodingFilter</filter ...

  2. ReentrantLock解析及源码分析

    本文结构 Tips:说明一部分概念及阅读源码需要的基础内容 ReentrantLock简介 公平机制:对于公平机制和非公平机制进行介绍,包含对比 实现:Sync源码解析额,公平和非公平模式的加锁.解锁 ...

  3. sql中partition的使用

    https://www.cnblogs.com/tfiremeteor/p/6296599.html

  4. require.js与IDEA的配合

    本文主要讲述在html中使用requirejs时,如何让IDEA更加智能识别javascript的方法. 测试时的目录结构,一种典型的 thinkphp 的结构,同时,在 a.thml 中通过 req ...

  5. PAT 1036 Boys vs Girls (25分) 比大小而已

    题目 This time you are asked to tell the difference between the lowest grade of all the male students ...

  6. hdl - HLS vs. Generator

    https://mp.weixin.qq.com/s/n_4RKlOddr_p2S_wODvFbw     介绍硬件建模的各个层次,以及基于RTL进一步提高层次的方法.   1. 物理版图   直接画 ...

  7. Chisel3 - bind - Data

    https://mp.weixin.qq.com/s/ENJVkz88sGgyODRNCu9jhQ   介绍Data类中的binding的定义和用法.   Binding stores informa ...

  8. Python——day2

    学完今天我保证你自己可以至少写50行代码 明天,还在等你 回顾day1 小练习1: 小练习2: 小练习3: 好了激情的的一天已经过去了正式开始,day2的讲解         Day2 目录: 格式化 ...

  9. Java实现 LeetCode 420 强密码检验器

    420. 强密码检验器 一个强密码应满足以下所有条件: 由至少6个,至多20个字符组成. 至少包含一个小写字母,一个大写字母,和一个数字. 同一字符不能连续出现三次 (比如 "-aaa-&q ...

  10. Java实现 LeetCode 106 从中序与后序遍历序列构造二叉树

    106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序 ...