最近要开发1个接口,接收到1个指令后自动触发自动化测试,虽然也可以通过shell命令做这一步,但因为目前所有构建自动化的的动作都通过jenkins完成,所以想要尝试能不能用python去控制jenkins构建job。还真有!万能的python。想起来一句话,有趣的事,python永远不会缺席!

  通过jenkins-python实现在后台操作jenkins构建job,只需要5步,并且前面4步都是简单的配置,用python代码实现操作也只有不到20行代码,很简单

  step1:在jenkins中创建1个测试job

  step2:查看Jenkins的User Id,并记录下来,等下配置python脚本时需要用到

  step3:jenkins生成api-token,记录token至1个文档中,后面要用到 

点击【保存】

  step4:安装python-jenkins库

  命令行安装

 sudo pip install python-jenkins

  pythonCharm安装:

  当前使用的python-jenkins版本是1.5.0

   接下来通过python脚本尝试构建一个jenkins项目

  代码示例:

   通过这个小示例,感觉用python-jenkins还是可以非常方便在的在后台操作jenkins的。

  

 #导入依赖
import jenkins #定义远程的jenkins master server 的url,以及port
jenkins_server_url = 'http://10.1.71.51:8080/jenkins' #定义用户的Userid 和 api token
user_id = 'admin'
api_token = '11a7a8151dbde5173fa19b346ad46b5efe' #实例化jenkins对象,连接远程的jenkins master server
server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token)
#打印一下server查是否连接成功
# print(server) #返回一个jenkins对象<jenkins.Jenkins object at 0x10807d190> # 构建job名为testJob的job(不带构建参数)
# server.build_job('testJob') #查看某个job的构建信息
job_info=server.get_job_info('testJob')
# print(job_info) #获取job名为testJob的job的最后次构建号
lastbuildNumber=server.get_job_info('testJob')['lastBuild']['number'] #获取job名为testJob的job的最后1次构建的执行结果状态
result =server.get_build_info('testJob',lastbuildNumber)['result'] #判断testJob是否还在构建中
status = server.get_build_info('testJob',lastbuildNumber)['building']
print(status)

  我们可以打印job_info可以一下会看到什么信息:

  可以很明显看出来,get_job_info('job_name')返回的是整个job的构建信息

job_info=server.get_job_info('testJob')
 {
'_class': 'hudson.model.FreeStyleProject',
'actions': [
{ },
{ },
{ },
{
'_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'
}
],
'description': '',
'displayName': 'testJob',
'displayNameOrNull': None,
'fullDisplayName': 'testJob',
'fullName': 'testJob',
'name': 'testJob',
'url': 'http: //10.1.71.51/jenkins/job/testJob/',
'buildable': True,
'builds': [
{
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
{
'_class': 'hudson.model.FreeStyleBuild',
'number': 24,
'url': 'http: //10.1.71.51/jenkins/job/testJob/24/'
},
{
'_class': 'hudson.model.FreeStyleBuild',
'number': 23,
'url': 'http: //10.1.71.51/jenkins/job/testJob/23/'
}
],
'color': 'blue',
'firstBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 1,
'url': 'http: //10.1.71.51/jenkins/job/testJob/1/'
},
'healthReport': [
{
'description': 'Buildstability: Norecentbuildsfailed.',
'iconClassName': 'icon-health-80plus',
'iconUrl': 'health-80plus.png',
'score': 100
}
],
'inQueue': True,
'keepDependencies': False,
'lastBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastCompletedBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastFailedBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 7,
'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
},
'lastStableBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastSuccessfulBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastUnstableBuild': None,
'lastUnsuccessfulBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 7,
'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
},
'nextBuildNumber': 26,
'property': [ ],
'queueItem': {
'_class': 'hudson.model.Queue$WaitingItem',
'blocked': False,
'buildable': False,
'id': 55,
'inQueueSince': 1567674112446,
'params': '',
'stuck': False,
'task': {
'_class': 'hudson.model.FreeStyleProject',
'name': 'testJob',
'url': 'http: //10.1.71.51/jenkins/job/testJob/'
},
'url': 'queue/item/55/',
'why': 'Inthequietperiod.Expiresin4.9秒',
'timestamp': 1567674117446
},
'concurrentBuild': False,
'downstreamProjects': [ ],
'labelExpression': None,
'scm': {
'_class': 'hudson.scm.NullSCM'
},
'upstreamProjects': [ ]
}

参考文档:

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

通过jenkins-Python在后台操作Jenkins构建job的更多相关文章

  1. python 操作jenkins 常用api

    Python-Jenkins 继续寻找,然后我在Jenkins官网上找到了Python-Jenkins API,仔细阅读后发现,它几乎涵盖了大部分Jenkins的操作,大大方便了我们在后台进行对Jen ...

  2. 初次尝试使用jenkins+python+appium构建自动化测试

    初次尝试使用jenkins+python+appium构建自动化测试 因为刚刚尝试使用jenkins+python+appium尝试,只是一个Demo需要很多完善,先记录一下今天的成果,再接再厉 第一 ...

  3. python操作jenkins、python-jenkins api

    Jenkins作为最流行的自动化流程的核心工具,我们使用它自带的web-ui完全可以满足日常的构建及发布工作,但是如果需要和其他系统做集成就必须二次开发或者通过API方式进行交互了. Jenkins介 ...

  4. Jenkins+github的一次定时构建示例

    首先说明,我的电脑环境是windows,所以以下的示例是基于windows10 X64. 一.新建任务,填写名称,选择类型,点击左下角的[确定] 二.配置 1.General 2.源码管理 之前在gi ...

  5. linux+jenkins+python+svn 自动化测试集成之路

    本文背景: 背景1---个人基础: 本机win7上安装pycharm,使用python搭建API自动化测试框架,本地运行Pass.本机上搭建jenkins,创建测试任务,定时构建Pass. 背景2-- ...

  6. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  7. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  8. Jenkins+Python自动化测试持续集成详细教程

    ​ Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.由于是基于java开发因此它也依赖jav ...

  9. 使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)

    1.安装jenkins 2.浏览器访问jenkins主页 http://192.168.0.1:8080/,点击“系统管理” 3.在插件管理中,安装Publish Over SSH插件 4.在系统设置 ...

随机推荐

  1. RouterOS Firewall v6 流程图

    1. Firewall v5和Firewall v6对比图 2.Firewall v6的流程图

  2. git用ssh方式下载和提交代码

    之前git上传下载代码都是用的http方式,但是今天遇到个大文件上传的时候,http方式上传超出大小限制了413 request entity too large,所以改成了用ssh方式上传,简单记录 ...

  3. ftp不能复制文件

    解决办法: ie->工具->internet选项->安全->自定义级别->下载->文件下载->启用

  4. 总结c语言

    这个月的总结,我学到的知识虽然不是很多,学的很慢,也不懂什么意思,也没有多加去复习,也许这就是不去敲代码的代价,也只会简单的代码,学的时候真的是找不到思路,觉得这代码跟着老师讲课照着输入进去就可以了, ...

  5. vscode预览markdown文件

    前提是需要安装Markdown Preview Enhanced插件

  6. “==”与equals方法

    “==”操作符 基本类型比较值:判断两个变量的值相等. 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时才相等. 用“==”进行比较时,两边的数据类型必须兼容(可自动转换的基本数据类型除外 ...

  7. head first 设计模式笔记9-迭代器模式

    迭代器模式:提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示. 迭代器接口 /** * @author oy * @date 2019年9月22日 上午9:03:08 * @ver ...

  8. ueditor+实现word图片自动上传

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  9. BZOJ 3697: 采药人的路径 点分治

    好久不做点分治的题了,正好在联赛之前抓紧复习一下. 先把边权为 $0$ 的置为 $-1$.定义几个状态:$f[dis][0/1],g[dis][0/1]$ 其中 $f$ 代表在当前遍历的子树内的答案. ...

  10. Python字典里的5个黑魔法

    Python里面有3大数据结构:列表,字典和集合.字典是常用的数据结构,里面有一些重要的技巧用法,我把这些都整理到一起,熟练掌握这些技巧之后,对自己的功力大有帮助. 1.字典的排序: 用万金油sort ...