任务系统之API子任务

日常运维工作中有许多的任务要执行,例如项目发布/数据备份/定时巡检/证书更新/漏洞修复等等,大部分的任务都会有多个步骤共同完成,例如一个发布任务会有拉代码、编译、分发、通知等等步骤,而不同的任务可能还包含相同或相似的步骤,例如对于相同语言相同架构的不同项目来说,他们的发布任务步骤可能是相同的,仅仅是几个参数不同而已,为此我们上线了任务系统,任务系统可以像乐高搭积木一样组合不同的步骤(也就是子任务)为一个模板,然后基于模板配合参数来创建任务并执行,灵活且高效

其中子任务的类型越丰富则上层模板的组合方式就会越多样,从而最终的任务覆盖场景就能越全面,目前任务系统子任务的类型已经支持了命令、脚本、作业、Jenkins、审批、通知、API、告警策略和事件规则,之前有篇文章任务系统之Jenkins子任务介绍过Jenkins类型子任务的实现,那这篇文章来介绍下另一个很重要的子任务类型:API

API的使用场景非常之广,在现代的Web系统中绝大部分的操作都可以由API来完成,任务系统对API类型子任务的支持不仅使得任务系统的覆盖场景更加的全面,同时也使得API的调用更加的方便和安全。在未支持API类型子任务之前,任务系统都是通过脚本类型子任务由用户自己编写脚本来实现API调用的,这种方式虽然可用但存在问题,其一是因为写脚本对用户有一定的能力要求,同时增加了复杂度,其二也更为关键的是不安全,API往往需要验证,验证内容写在脚本中,脚本明文存储在数据库中,增加了安全风险,集成API类型子任务可以完美解决这两个问题

API类型子任务的使用方式很简单,只需要三步,第一步新建API,第二步新建API类型的子任务,这里选择第一步创建的API,第三步在任务模板中添加第二步创建的子任务,然后就可以新建任务执行了。其中第二第三步是任务系统的通用流程,这里重点说下第一步关于API的创建,API与Jenkins一样是作为一个插件存在于系统中的,由独立的API管理页面

点击右上角添加按钮之后就可以添加新的API了,创建表单主要包含名称、请求、参数和成功条件四块内容

名称就是个输入框,标识这个API的名称,清晰易理解就好

请求和参数用来配置这个API的主要属性,包含了Method、URL、Parameters、Body、Headers、Cookies和Authentication认证方式配置,页面参考了Postman的设计。其中认证方式的话支持Basic、BearerToken和APIKey,后续也可以根据需要新增更多的认证方式,甚至直接接入多云的认证,实现云上API的便捷使用,以弥补多云系统的不足

前后端通过JSON格式实现数据交互,前端根据输入的请求和参数组装成JSON格式提交给后端,后端则根据认证方式加密对应的密码或Token字段并保存到数据库,当任务请求发起时从数据库获取JSON数据并解密,解析解密后的JSON数据调用Requests模块请求并获取结果

最后一块是判断API是否请求成功的规则集,默认情况下会判断API的返回状态码,如果状态码为2xx或者3xx都认为是成功的,当然用户也可以根据状态码或是响应体自定义成功的规则,例如某些情况下你可能仅需要API返回200表示成功,或者是响应体里的state字段为1算成功,都可以通过自定义灵活的配置。判断API是否请求成功很重要,在一个任务流中,某个步骤的成功与失败直接影响后续步骤的执行,API也不例外,当API任务执行失败时则终止任务流程的执行

前端组装好的JSON格式参考如下

{"name": "获取Github仓库blog的branches","api": {"method": "GET","url": "https://api.github.com/repos/ops-coffee/blog/branches","parameters": [],"body": "","headers": [{"name": "Content-Type", "note": "", "type": "string", "value": "application/json"}],"cookies": [],"authorization": {"type": "Bearer","bearer_token": "ghp_3dtK****************IIcN",}},"success": [{"key": "status_code", "type": "状态码", "value": ["200"], "operator": "匹配"}, {"key": "name", "type": "响应体", "value": "main", "operator": "等于"}]
}

后端加解密的方法可以参考文章Model字段加密的优雅实现,Request请求则比较简单

# 不同的认证类型使用不同的请求方式
if authorization.get("type", "").lower() == "basic":auth = (authorization.get("basic_username", ""), authorization.get("basic_password", ""))response = requests.request(method, url, params=parameters, headers=headers, cookies=cookies, auth=auth,data=body)else:if authorization.get("type", "").lower() == "bearer":headers["Authorization"] = "Bearer " + authorization.get("bearer_token", "")elif authorization.get("type", "").lower() == "apikey":headers[authorization.get("api_key_key")] = authorization.get("api_key_value", "")response = requests.request(method, url, params=parameters, headers=headers, cookies=cookies, data=body)# 解析Response结果判断是否成功
......

API创建完成后就可以添加子任务,添加了子任务就可以将子任务添加到模板,最后创建任务并执行了,执行结果实时输出

至此API类型子任务介绍完成,API类型子任务快速打通了任务系统与三方的链接,为任务系统增加了无限可能,期待它在业务中的表现

文章转载自: ops-coffee

原文链接:https://www.cnblogs.com/37Y37/p/18039342

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PRL算法调控

伴随汽车电子技术发展,传统轮式车辆制动系统的气体或液体传输管路长,阀类原件多原有的真空助力系统无法兼顾车辆的再生制动功能,而再生制动功能是混合动力车辆是混动车辆最主要的市场优势之一,真空助力器逐渐被eBooster 所取代。针…

微信小程序 - 渲染和逻辑

通信模型 渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。 数据驱动 WXML会解析对应model值,并生成js对象,最后生成最终的dom树。 当model发生变更时候,会判断解析wxml后的js对象是否改动,若改动…

[重磅更新] Mac玩游戏必备!Crossover24版现已上线!附免费升级攻略 Crossover软件使用方法安装程序 免费版

好久不见啦,最近一直在忙着研究Mac玩游戏,什么幻兽帕鲁、女神异闻录之类的,有些沉迷了,实在对不住大家… 不过今天还是给大家带来了好消息!那就是让Mac玩游戏不再是笑话的神器,Crossover正式发布了2024版&a…

使用CANoe进行27服务安全认证解密算法

方法:通过cdd文件dll文件进行27服务通过安全认证解密 步骤1:菜单栏选中Diagnostics&XCP这一栏, 步骤2:鼠标左击CANdelaStudio 步骤3:弹出如下弹窗,选择 I accept 步骤4:选择新建 步骤5&…

redis-Redis主从,哨兵和集群模式

一,Redis的主从复制 ​ 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。这样做的好处是读写分离,性能扩展,容灾快速恢复。 1.1 环境搭建 如果你的redi…

ModStartCMS v8.1.0 图片前端压缩,抖音授权登录

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市…

手机AI摄影时代开启,传音引领行业标准化建设

今年春节,AI摄影可谓大出风头。人们在社交平台晒出自己在龙年的AI写真,极大地增添了节日的氛围感,也让我们看到了“AI摄影”的价值。新年伊始,手机巨头们纷纷布局该赛道,基于AI大模型实现的影像功能成为业界关注焦点。…

Java Web(十)--jQuery

介绍 官网文档:jQuery 教程 jQuery API 中文文档 | jQuery API 中文在线手册 | jquery api 下载 | jquery api chm 下载地址:https://jquery.com/download/%20jQuery jQuery 是一个快速的,简洁的 javaScrip工具库,使用户能更方…

C语言 变量

变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头…

全网最新的软件测试面试八股文

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 测试技术面试题 1、什么是兼容性测试?兼容性测试侧…

一、前端开发

#视频链接:https://www.bilibili.com/video/BV1rT4y1v7uQ?p1&vd_source1717654b9cbbc6a773c2092070686a95 前端开发 前端开发1、快速开发网站2、浏览器能识别的标签2.1 编码(head)2.2 title(head)2.3 标题2.4 div和span练习题2.5 超链接…

03|索引优化

数据准备 创建联合索引 KEY idx_name_age_position (name,age,position) USING BTREE CREATE TABLE employees (id int(11) NOT NULL AUTO_INCREMENT,name varchar(24) NOT NULL DEFAULT COMMENT 姓名,age int(11) NOT NULL DEFAULT 0 COMMENT 年龄,position varchar(20) NO…

内存操作函数(c语言)

目录 概述1. memcpy函数2.memcpy函数的模拟实现3. memcmp函数4.memcmp函数的模拟实现5. memset函数6.memset函数的模拟实现7. memmove函数8.memmove函数的模拟实现结语 概述 C语言提供了一些非常有用的内存操作函数,其中包括memcpy、memcmp、memset和memmove。这些…

MQTT简介

https://mqtt.org/ MQTT(Message Queuing Telemetry Transport) 一种轻量级的,基于发布订阅模式的通信协议,用于在物联网和机器与机器(M2M)通信中传输消息。 它具有低带宽和低功耗的特点,适用于…

vue3 开发记录

1.引入nprogress插件,显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法: vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【学习记录】Resnet

Resnet的残差块 BasicBlock模块: Resnet的作用 解决梯度消失。网络越深,会导致梯度消失。Resnet可以解决梯度消失的问题。 Resnet的原理 参考视频:https://www.bilibili.com/video/BV1cM4y117ob/?spm_id_from333.337.search-card.all.cl…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表,一目了然,腾讯云服务器分为轻量应用服务器和云服务器CVM,CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选,公网带宽1M、3M、5M、12M、18M、22M、28M…

FreeRTOS任务切换

目录 一、PendSV异常 二、任务切换场合 1、执行系统调用 2、滴答定时器(SysTick)中断 三、PendSV中断服务函数 1、分析xPortPendSVHandler中断服务函数 四、查找下一个要运行的任务的两种方法 1、获取下一个要运行的任务 2、查找下一个要运行的任务的两种方法 2.1、通…

Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统,它与Apache Subversion(SVN)集成在一起,提供了一个用户友好的界面,方便用…

ThreeDWorld(TDW)学习(待更新)

目录 前言 1.TDW 2.transport challenge 总结 前言 因为挑战赛了解到tdw仿真平台。 想了解的请点击: GitHub - threedworld-mit/tdw: ThreeDWorld simulation environment GitHub - chuangg/tdw-transport-challenge-starter-code 1.TDW ThreeDWorld (TDW)是一…