任务系统之Jenkins子任务
今天下班即开启五一假期,早上临时定了行程去山东日照,原本计划下班就出发,但下班看了看导航,这一路红得发黑,于是决定还是晚点再走,现在有时间了,写篇简单的技术文章来提升下Blog逐渐降低的技术内容含量吧
之前有一系列的文章来介绍我们的任务系统,随着任务系统在项目间的推广,以及项目使用的深入,任务系统又增加了非常多实用又好用的功能,今天这篇文章就来介绍其中的一个:Jenkins子任务
任务系统通过组合各种不同类型的子任务来完成复杂的任务流程,之前的子任务支持命令和脚本,支持审批和通知,能覆盖绝大部分的发布部署场景,但仍然有一部分项目因为各种各样的原因依然使用了Jenkins来发布部署,想让项目owner抛弃Jenkins而迁移到任务系统动力不足困难不小,于是我将Jenkins作为一个子任务类型给集成进了任务系统,原本Jenkins里的Job完全不用动就可以简单的集成进任务系统

Jenkins集成进任务系统,不仅仅是可以通过任务系统来执行Job而达到项目管理的统一,更重要的是可以借助于任务系统的审批/通知/并行/告警/定时/周期等等强大的功能来实现完整的发布部署任务流,同时由于我们任务系统完全兼容手机端,那对于发布部署任务将可以随时随地掏出手机来执行,运维的假期再也不用到哪都背着电脑了,多了一份逍遥与自在
以一个模拟的Coffee项目更新流程为例,执行Jenkins的Job只是整个完整发布流程中的一步而已,通过任务系统可以将整个发布流程完美闭环,省去了很多沟通和认为操作过程

以上介绍了我们为什么需要将Jenkins集成进任务系统,同时也简单说明了将Jenkins的Job集成进任务系统通过任务系统执行的优势,那么接下来讲讲我们是如何将Jenkins集成进任务系统的,其实也很简单,借助于Jenkins完善的API
Jenkins没有统一的API入口,而是采用了{url}/api的API样式,其中{url}代表Jenkins资源的URL,常见的Jenkins资源包括:站点、Job和Build,可以通过不同级别的URL地址查看到当前级别的API信息,例如:
- 节点管理: https://jenkins.ops-coffee.cn/computer/api/
- 认证管理: https://jenkins.ops-coffee.cn/credentials/api/
- 插件管理: https://jenkins.ops-coffee.cn/pluginManager/api/
结果支持两种返回格式,分别是JSON和XML,通过加不同的URL后缀来实现,例如:https://jenkins.ops-coffee.cn/computer/api/json返回json格式的数据,https://jenkins.ops-coffee.cn/computer/api/xml则返回xml格式的数据
接入Jenkins子任务需要用到如下几个API:
- 获取Job列表
获取Job列表使用GET方法
https://jenkins.ops-coffee.cn/api/json
- 获取Job详情
获取Job详情使用Get方法
https://jenkins.ops-coffee.cn/job/{job-name}/api/json
同时Job详情页面同时也能获取到Job所需要的参数
- 执行Job
执行Job通过POST方法,分为带参数和不带参数两个API,其中不带参数使用
https://jenkins.ops-coffee.cn/job/{job-name}/build
带参数使用
https://jenkins.ops-coffee.cn/job/{job-name}/buildWithParameters?namespace=dev&branch=master
执行完Job后,需要获取到Job的BuildID,BuildID可以通过从返回结果header的Location里获取
- 获取Build输出
获取Build的Console输出使用GET方法,通过Build的Console输出我们可以实时获取Job的执行情况
https://jenkins.ops-coffee.cn/job/{job-name}/{build-id}/logText/progressiveText
- 获取Build详情
获取Build的详情使用GET方法,通过Build详情里的result能知道Job的执行状态及结果
https://jenkins.ops-coffee.cn/job/{job-name}/{build-id}/api/json
- 停止Job执行
停止Job执行使用POST方法,当Job执行的过程中不及我们预期需要紧急停止Job执行时需要借助此API来完成
https://jenkins.ops-coffee.cn/job/{job-name}/{build-id}/stop
整个Jenkins子任务的集成我们主要用到了这几个API,关于Jenkins的API认证用到了最基本的AuthBase方式,一个完整的获取JobList的例子如下
class JenkinsAPI:
def __init__(self, domain, username, password, verify=True):
self.domain = domain
self.session = requests.Session()
self.session.auth = (username, password)
self.session.verify = verify
def job_list(self):
try:
r = self.session.get(self.domain + '/api/json')
return True, r.status_code, r.json()
except Exception as e:
return False, 500, '获取Job List失败:' + str(e)
有了这些API我们就能轻松的将Jenkins集成进任务系统了,在任务系统中执行Jenkins的Job也是非常的简单和方便,实时日志输出,以及随时可以终止执行,体验与Jenkins无异了

好了,文章就写到这里,看了下导航,拥堵稍稍缓解,但依然严重,洗个澡睡个觉,凌晨起床出发
任务系统之Jenkins子任务的更多相关文章
- 分布式任务系统gearman的python实战
Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统.Gearman是一个分发任务的程序框架,可以 ...
- jenkins multijob 插件使用
如果你想要停止对下游/上游工作链定义的混乱 当您想要添加具有层次结构的任务时,按顺序执行或并行执行 安装multijob插件可以让jenkins任务按照分组.顺序执行 jenkins版本:2.80 1 ...
- c++小学期大作业攻略(四)任务系统+站内信
虽然比最早的预定晚了整整一个星期但这核心功能最后一篇终于还是来了. 如果你已经经历了用户系统的洗礼,相信代码实现应该已经没有太大的难度,所以我们重点关注一下设计好的流程. 一.任务系统 首先是新建任务 ...
- Jenkins 进阶篇 - 任务关联
有时候我们的一个任务里面会进行很多的步骤,例如构建一个后端的 Java 服务,可能会有代码静态扫描,静态扫描通过后会打包成 jar 或者 war 文件,打包成功后可能还会对制品进行存档备份,然后可能会 ...
- 7.Jenkins进阶之流水线pipeline语法入门学习(2)
目录一览: (2) Declarative Pipeline Syntax 2.1) Sections - 章节 2.2) Directives - 指令 2.3) Sequential Stages ...
- Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告
最近在做基于jenkins ant junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...
- Python-Jenkins API使用 —— 在后端代码中操控Jenkins
最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...
- 在centos7上安装Jenkins
在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...
- 项目持续集成环境(jenkins + SVN + maven + tomcat)
整体流程 每次SVN上代码有变动,触发自动构建动作,并部署到服务器的tomcat上,具体流程: 1.SVN上提交代码修改 2.maven执行Goals 3.将web工程打成war包 4.关闭服务器的t ...
- Jenkins的一个bug-同时build一个项目两次导致失败
我们有一个job A, A只是配置了一些参数,它会去触发模板job B. 我一开始点击构建A, 马上发现参数配置不对,于是撤消了构建,但是我没有发现B已经被触发,我重新配置参数,然后再次构建A,这个时 ...
随机推荐
- 京东薅羊毛脚本-Docker
一.安装好docker,然后创建容器: 注1:如果是旁路由,建议用--network host \代替-p 5678:5678 \这一行. 注2:如果想要看到lxk0301大佬的js脚本,并且重新部署 ...
- ffmpeg设置超时时间
使用 -rw_timeout 参数 注意:1.参数单位是微秒,而不是秒.1秒(s)=1000000微秒(μs) 2.参数要放在开流前,否则不会生效 参考资料: FFmpeg命令读取RTMP流如何设 ...
- Github高效搜索方式
Github高效搜索方式 文章目录 Github高效搜索方式 0.写在前面 1.常用的搜索功能 1.1 直接搜索 1.2 寻找指定用户|大小的仓库 1.3 搜索仓库 1.4 查找特定star范围的仓库 ...
- 记录一次MySQL主从同步
主库配置 server-id=1log-bin=mysql-binbinlog_format=ROWbinlog_row_image=minimalbinlog-do-db=yjtb-cloud 解释 ...
- Json对象转换模块(自编代码JsonObject.cs)
namespace 信息采集系统.Common { /// <summary> /// Json类型对象,用于其它Json对象继承 /// </summary> /// < ...
- Https交互原理
Http超文本传输协议 基于tcp和Ip实现的一种可靠的传输协议,可靠的保证了客户端和服务器之间的传输不会丢失,但是却没办法保证传输数据的安全性. Https是Http的升级版本,用于解决Http数据 ...
- TP5.0--5.1获取当前域名的方法
TP5.0获取当前域名的方法 use think\Request; $request = Request::instance(); $domain = $request->domain(); 获 ...
- Python项目案例开发从入门到实战-1.2 Python语法基础
书籍信息 1.2 Python语法基础 1.2.1 Python数据类型 数值类型 整型(int):浮点型(float):复数(complex),以j或J结尾,如2+3j 字符串 布尔类型 空值,用N ...
- 使用vite创建vue3 遇到 process is not defined
今天新建项目遇到报错,查资料得出,需要在vite.config.js中添加代码如下 import { defineConfig } from 'vite' import vue from '@vite ...
- RPA的市场需求
最基本的RPA软件机器人定义:机器人通过记录员工在电脑桌面上的操作行为,将业务处理规则和操作行为记录下来,并模拟人的方式在电脑上自动执行一系列特定的工作流程.采用RPA软件机器人解决方案,快速实施,快 ...