需求:

我要用python通过api,启动这个job,并且启动这个job需要1个参数

安装依赖:

pipenv install python-jenkins

熟悉API的使用方法:

了解一个API的最好办法,就是先看它的官方文档,

从中找到自己需要的方法 ,弄明白要给方法传什么参,参数类型,返回值类型

然后再做一个小demo,验证自己的想法,顺便也能熟悉一下这个api

我从官方文档中找到下面这3个方法,正是我需要的:

  • build_job用来启动job
  • get_build_console_output用来获取job的构建日志
  • get_queu_info用来获取 pending状态 的job

build_job(nameparameters=Nonetoken=None)

Trigger build job.

This method returns a queue item number that you can pass to Jenkins.get_queue_item(). Note that this queue number is only valid for about five minutes after the job completes, so you should get/poll the queue information as soon as possible to determine the job’s URL.

Parameters:
  • name – name of job
  • parameters – parameters for job, or Nonedict
  • token – Jenkins API token
Returns:

int queue item

get_build_console_output(namenumber)

Get build console text.

Parameters:
  • name – Job name, str
  • number – Build number, int
Returns:

Build console output, str

get_queue_info()
Returns: list of job dictionaries, [dict]
Example::
>>> queue_info = server.get_queue_info()
>>> print(queue_info[0])
{u'task': {u'url': u'http://your_url/job/my_job/', u'color': u'aborted_anime', u'name': u'my_job'}, u'stuck': False, u'actions': [{u'causes': [{u'shortDescription': u'Started by timer'}]}], u'buildable': False, u'params': u'', u'buildableStartMilliseconds': 1315087293316, u'why': u'Build #2,532 is already in progress (ETA:10 min)', u'blocked': True}

创建测试工程:

接下来创建1个测试job,验证自己的想法

启动该job,需要传递1个字符型参数,参数名是Para1,默认值是:参数1

在shell中打印Para1的参数值:

 代码示例:

import jenkins

#定义远程的jenkins master server 的url以及Port
jenkins_server_url = 'http://10.2.1.92:8080/jenkins/'
#定义用户的userid 和 apitoken(在jenkins中生成)
user_id = 'admin'
api_token = '11d8c79994b1e6d554c857b1d96fcf4dfe' #测试服务器 #实例化jenkins对象,连接远程的jenkins master server
server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token)
print(server) name ='pubTest1'
parameters={'Para1':'Python启动带参数的job'} #dict类型
#构建job(带参数) server.build_job(name,parameters)

构建结果:

 这样就通过 python启动了带参数的job

接下来,通过get_build_console_output方法 打印job的构建日志

#获取job的最后次构建号
lastbuildNumber=server.get_job_info(name)['lastBuild']['number'] #输出构建日志
log=server.get_build_console_output(name,lastbuildNumber)
print(log)

结果如下:

由用户 admin 启动
构建中 在工作空间 /root/.jenkins/workspace/pubTest1 中
[pubTest1] $ /bin/sh -xe /usr/local/tomcat/apache-tomcat-8.5.40/temp/jenkins3208269061259629186.sh
+ echo Python启动带参数的job
Python启动带参数的job
Finished: SUCCESS

最后,通过get_queue_info获取pending状态的job列表

使用场景:

通过 api启动job后,这个job会有一段pending状态,这个时间如果用get_build_info是获取不到正在pending状态job信息的.

所以可以这样判断:

如果job出现在queue_info中,则等待一段时间再获取 get_build_info,直到job不出现在queue_info中,则表明job已经启动成功/失败.

代码示例:

#获取正在排队构建的job队列 即pending状态中的所有job,如果没有 pending状态的job即返回1个空列表
queue_info=server.get_queue_info()
print(queue_info)

返回值:

{
'_class': 'hudson.model.Queue$WaitingItem',
'actions': [
{
'_class': 'hudson.model.ParametersAction',
'parameters': [
{
'_class': 'net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterValue',
'name': 'Branch',
'value': 'origin/develop'
},
{
'_class': 'hudson.model.StringParameterValue',
'name': 'ENV',
'value': 'debugenv'
}
]
},
{
'_class': 'hudson.model.CauseAction',
'causes': [
{
'_class': 'hudson.model.Cause$UserIdCause',
'shortDescription': '由用户admin启动',
'userId': 'admin',
'userName': 'admin'
}
]
}
],
'blocked': False,
'buildable': False,
'id': 3427,
'inQueueSince': 1575772564711,
'params': '\nBranch=origin/develop\nENV=debugenv',
'stuck': False,
'task': {
'_class': 'hudson.model.FreeStyleProject',
'name': 'export_apk',
'url': 'http: //10.2.1.92: 8080/jenkins/job/export_apk/',
'color': 'aborted'
},
'url': 'queue/item/3427/',
'why': '处于静默期。截止4.9秒',
'timestamp': 1575772569711
}

关于如何获取jenkins token和user_id可参考前文:通过jenkins-Python在后台操作Jenkins构建job

[Python]python-jenkins 启动需要参数的job的更多相关文章

  1. python实现Linux启动守护进程

    python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...

  2. Python函数的定义、参数传入与函数的调用

    作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色.今天给大家介绍Python函数的定义.参数的传入以及调用方式.其中函数参数的传入方式为本节重点内容.Python函数的参数形式包 ...

  3. 接口自动化 [授客]基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0

    基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  4. 基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0

    基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0 目录 1. 开发环境2. 主要功能逻辑介绍3. 框架功能简介 4. 数据库的创建 5. 框架模块详细介绍6. Tes ...

  5. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  6. python函数 位置参数,关键字参数,可变参数优先级

    def fun(arg,args=1,*arg,**keywords): python 一共有这四类参数,第一类最常见,不用多说,第二类,关键字参数,python能通过关键字找到参数,python函数 ...

  7. python中的函数的参数和可变参数

    最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 为了尊重原作者,这里附上链接:http://www.cnblogs.com/tqsummer/archive/ ...

  8. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

  9. python项目使用jsonschema进行参数校验

    python项目使用jsonschema进行参数校验 最近想要给一个新的openstack项目加上参数校验,过完年回来准备开工的时候,发现其他人已经在做了,对应的patch是:https://revi ...

随机推荐

  1. 3、Rsync备份服务实战

    1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync官方地址:传送门http:// ...

  2. ad 拼板

    随着整个电子产业的不断发展,电子行业的很多产品都已经有完善的上下游配套企业.从一个成熟产品的方案设计,外观设计,加工制造,装配测试,包装,批发商渠道等等,这样的一条产业链在特定的环境就这样自然地生成. ...

  3. python对ip地址排序、对列表进行去重

    一:使用python对ip地址排序所用代码示例一: import socket iplist = ['10.5.11.1','192.168.1.33','10.5.2.4','10.5.1.3',' ...

  4. mysql下优化表和修复表命令(repair table、optimize table)

    随着mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间,方便备份. repair table table_name //修复表 optim ...

  5. java8学习之深入函数式接口与方法引用

    函数式接口: 函数式接口[FunctionalInterface]是整个Lambda表达式的一个根源,换句话来说java8中的Lambda表达式要想彻底掌握,前提是要彻底理解好函数式接口,所以这次继续 ...

  6. Linux之more命令

    命令解释 more命令类似与cat命令,却比cat命令强大,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作. 命令说明 more [选项] 文件.. 命令选项 -d    显示帮助 ...

  7. 查看 SharePoint Server 中的所有网站集

    网站集是具有同一所有者并共享管理设置(例如权限和配额)的一组网站.网站集是在 Web 应用程序中创建的.创建网站集时,将自动在网站集中创建一个首要网站.然后,可以在首要网站下创建一个或多个子网站.首要 ...

  8. select ... into outfile备份及恢复使用

    select ... into outfile语句是一种逻辑备份的方法,更准确地说是导出一张表中的数据. Syntax:SELECT    [ALL | DISTINCT | DISTINCTROW ...

  9. python操作hive 安装和测试

    方法一:使用pyhive库 如上图所示我们需要四个外部包 中间遇到很多报错.我都一一解决了 1.Connection Issue: thrift.transport.TTransport.TTrans ...

  10. js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别

    JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...