任务系统之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,这个时 ...
随机推荐
- 8-WebShell总结
WebShell 1.webshell介绍 在计算机科学中,Shell 俗称壳(用来区别"核"),是指"为使用者提供操作界面"的软件(命令解释器).类似于win ...
- centos 添加yum源失败,ping 百度没响应
1. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.r ...
- vuforia 打包IOS 第一次启动正常, 删掉过程重新启动初始化失败。
我使用的是2019.4.17版本,降级到2019.2.17问题解决
- Rename a Local and Remote Git Branch
Renaming Git Branch Follow the steps below to rename a Local and Remote Git Branch: 01 Start by swit ...
- Rust for Rustaceans: Idomatic Programming for Experienced Developers Chap.2 Types
翻译的内容如果有不理解的地方或者是其他的差错,欢迎后台回复讨论. 类型在内存中的表示 Rust中的每一个值都有自己的类型(Type).在这一章中,我们将会看到Rust中的类型服务于许多不同的目的,但其 ...
- Git 仓库7K stars!学Java开源项目austin要多久?
我是3y,一年CRUD经验用十年的markdown程序员常年被誉为职业八股文选手 开源项目消息推送平台austin仓库地址: 消息推送平台推送下发[邮件][短信][微信服务号][微信小程序][企业微 ...
- 【Keil】浅学一下keil中的.sct文件
[Keil]浅学一下keil中的.sct文件 最近重新捣鼓了acfly的源码,有了新的有趣发现,当然,过程并不有趣. 起因 clone下来我去年提交的代码,编译 ...... 报错辣! linking ...
- 学习ASP.NET Core Blazor编程系列三十——JWT登录(4)
学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...
- 使用 Azure OpenAI 打造自己的 ChatGPT
一.前言 当今的人工智能技术正在不断发展,越来越多的企业和个人开始探索人工智能在各个领域中的应用.其中,在自然语言处理领域,OpenAI 的 GPT 系列模型成为了研究热点.OpenAI 公司的 Ch ...
- OSM(OpenStreetMap)全球路网数据下载方式介绍
本文对OpenStreetMap(OSM)网页与各类OSM数据的多种下载方式加以详细介绍,并对不同数据下载方式加以对比. OSM数据包含道路与铁路路网.建筑.水体.土地利用.兴趣点.行政区边界 ...