今天下班即开启五一假期,早上临时定了行程去山东日照,原本计划下班就出发,但下班看了看导航,这一路红得发黑,于是决定还是晚点再走,现在有时间了,写篇简单的技术文章来提升下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信息,例如:

结果支持两种返回格式,分别是JSON和XML,通过加不同的URL后缀来实现,例如:https://jenkins.ops-coffee.cn/computer/api/json返回json格式的数据,https://jenkins.ops-coffee.cn/computer/api/xml则返回xml格式的数据

接入Jenkins子任务需要用到如下几个API:

  1. 获取Job列表

获取Job列表使用GET方法

https://jenkins.ops-coffee.cn/api/json
  1. 获取Job详情

获取Job详情使用Get方法

https://jenkins.ops-coffee.cn/job/{job-name}/api/json

同时Job详情页面同时也能获取到Job所需要的参数

  1. 执行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里获取

  1. 获取Build输出

获取Build的Console输出使用GET方法,通过Build的Console输出我们可以实时获取Job的执行情况

https://jenkins.ops-coffee.cn/job/{job-name}/{build-id}/logText/progressiveText
  1. 获取Build详情

获取Build的详情使用GET方法,通过Build详情里的result能知道Job的执行状态及结果

https://jenkins.ops-coffee.cn/job/{job-name}/{build-id}/api/json
  1. 停止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子任务的更多相关文章

  1. 分布式任务系统gearman的python实战

    Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统.Gearman是一个分发任务的程序框架,可以 ...

  2. jenkins multijob 插件使用

    如果你想要停止对下游/上游工作链定义的混乱 当您想要添加具有层次结构的任务时,按顺序执行或并行执行 安装multijob插件可以让jenkins任务按照分组.顺序执行 jenkins版本:2.80 1 ...

  3. c++小学期大作业攻略(四)任务系统+站内信

    虽然比最早的预定晚了整整一个星期但这核心功能最后一篇终于还是来了. 如果你已经经历了用户系统的洗礼,相信代码实现应该已经没有太大的难度,所以我们重点关注一下设计好的流程. 一.任务系统 首先是新建任务 ...

  4. Jenkins 进阶篇 - 任务关联

    有时候我们的一个任务里面会进行很多的步骤,例如构建一个后端的 Java 服务,可能会有代码静态扫描,静态扫描通过后会打包成 jar 或者 war 文件,打包成功后可能还会对制品进行存档备份,然后可能会 ...

  5. 7.Jenkins进阶之流水线pipeline语法入门学习(2)

    目录一览: (2) Declarative Pipeline Syntax 2.1) Sections - 章节 2.2) Directives - 指令 2.3) Sequential Stages ...

  6. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  7. Python-Jenkins API使用 —— 在后端代码中操控Jenkins

    最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...

  8. 在centos7上安装Jenkins

    在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...

  9. 项目持续集成环境(jenkins + SVN + maven + tomcat)

    整体流程 每次SVN上代码有变动,触发自动构建动作,并部署到服务器的tomcat上,具体流程: 1.SVN上提交代码修改 2.maven执行Goals 3.将web工程打成war包 4.关闭服务器的t ...

  10. Jenkins的一个bug-同时build一个项目两次导致失败

    我们有一个job A, A只是配置了一些参数,它会去触发模板job B. 我一开始点击构建A, 马上发现参数配置不对,于是撤消了构建,但是我没有发现B已经被触发,我重新配置参数,然后再次构建A,这个时 ...

随机推荐

  1. jsp执行流程

    Jsp执行流程 jsp -----java ----class E: \student\apache-tomcat-8.5.30\work\Catalina\localhost\JspProject ...

  2. Redis学习(黑马篇)

    1.redis是一个键值型数据库即在Redis内存的数据都是键值对的格式,如: 2.NOSQL非关系型数据库与MySQL关系型数据库对比: 非结构化类型分为:键值类型(Redis)(value支持多种 ...

  3. MOBIUS: Towards the Next Generation of Query-Ad Matching in Baidu's Sponsored Search——百度下一代搜索广告系统

    简介 传统的广告最终的呈现需要经过召回与排序两个阶段,百度的搜索架构则采用三层漏斗状,如图1所示.最上面的一层用于筛选出和用户查询最相关的一部分广告,将整个候选广告集从亿级降到千级:下面两层是排序阶段 ...

  4. day2Java程序基础

    Java程序基础 Java程序基本结构 一个程序的基本单位是class,class是关键字 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写字母开头 public除了修饰类 ...

  5. 记一次 .NET某汽车零件采集系统 卡死分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dump 丢给我,接下来用 windbg 探究 ...

  6. 65.C++的输入流和输出流

    1.流的概念和流类库的结构   程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件.   C++输入输出包含以下三个方面的内容:   对系统指定的标准设备的输入和输 ...

  7. java数据类型转换有哪几种?看这篇就够了!

    前言 在上一篇文章中,壹哥给大家讲解了Java中的数据类型,从此大家就知道了基本类型和引用类型,尤其是8种基本类型的使用和各自特点.但实际上数据类型的使用还有很多更深入的内容,比如java数据类型直接 ...

  8. CPU 100%问题排查总结

    更多内容,移步IT-BLOG 排查思路 [1]定位高负载进程 pid:登录进服务器使用 top 或 top -c命令[ps -ef | grep xxx 命令]查看当前 CPU消耗过高的进程,从而得到 ...

  9. Kafka 管理【主题、分区、消费者组】

    更多内容,前往 IT-BLOG 主题操作 使用 kafka-topics.sh 工具可以执行主题的大部分操作.可以用它创建.修改.删除和查看集群里的主题.要使用该工具的全部功能,需要通过 --zook ...

  10. C#多线程开发-了解C#5.0 05

    前面一篇文章,了解了任务并行库.这是异步编程基础设施,它允许我们以模块化的方式设计程序,来组合不同的异步操作.解决了以往线程之间传递消息难等问题,但是我们在阅读和编写此类程序时还是会觉得非常难理解程序 ...