Python利用requests库自己写一个Jenkins的任务操作接口

396 阅读3分钟

上一篇实现了利用requests库来重写node的操作,基本已经实现了node节点操作的自主代码管理,这一篇讲讲如何对job进行管理。

启动任务

带参数启动工程已经在前面的文章中提到过原理,

image.png

POST /job/test/buildWithParameters

job_name = 'test'  
data = {  
    'build_node': 'test'  
}  
response = requests.post(f'{jenkins_url}/job/{job_name}/buildWithParameters', auth=auth, data=data)  
print(response.status_code)  
print(response.text)

成功时返回状态码是201

这个功能的参数不能处理特别的类型,只能处理点简单的,诸如文本参数之类的,有默认值的参数可以不用传递,但是关联型参数必须要自己填写。

比如这里设置的node参数,在上面的启动方式下,并不会自己生产一个值出来。

image.png

构建记录中只有代码里传递的build_node参数和具有默认值的name参数。本应Jenkins自行计算出来的参数没有值。

image.png

获取工程基本信息

工程基本信息包含工程的参数和构建的记录

GET /job/test/api/json

得到的数据中property内的一个  _class 值为hudson.model.ParametersDefinitionProperty的部分展示了全部的参数信息。这里面不会展示密码类的默认值。

 

image.png  

在builds键下会展示构建的记录,每一项代表了存在的一次构建,数据会随着配置构建数限制而变化,每个子项的_class代表了构建的来源,如果是上级工程触发的,它会是一个别的值。

image.png

inQueue键标识工程是否在队列里排队,buildable键标识工程是否是可以触发构建的状态,disabled标识工程是否被标识成disable了,concurrentBuild标识工程是否能够多开。

还有downstreamProjects和upstreamProjects,将Jenkins工程的上下游工程展示出来。

其他的参数根据个人业务需要提取。

 

获取单次构建的数据

GET /job/test/9/api/json

获取的值中我觉得比较有用的部分有actions中的参数和启动来源信息、结果信息result、耗时信息duration。

image.png

删除某次构建记录

你要觉得一次构建不好,可以删除

POST /job/test/8/confirmDelete

job_number = 8  
headers = {  
    'host':'127.0.0.1'  
}  
response = requests.post(f'{jenkins_url}/job/{job_name}/{job_number}/confirmDelete', auth=auth,headers=headers)  
  
print(response.status_code)  
print(response.text)

这里稍微特别的是请求头一定要有host

禁用和解禁项目

指的是右侧的按钮

  image.png

POST /job/test/disable解开是enable

也需要请求头带host

结果可能会出现404,需要自己判别,后续同样遇到问题的可以设置个异常处理在这。

image.png  

添加工程说明

POST /job/test/submitDescription

需要有个data值

data = { 'description': 'add des'}

提交的值会覆盖原值,原值在工程基本信息中获得。

取得和修改工程配置

GET/POST /job/test/config.xml

这里与前面的获取节点配置是一样的,所以不再额外描述一遍。

response = requests.get(f'{jenkins_url}/job/{job_name}/config.xml', auth=auth)

删除工程

POST /job/test/doDelete

不需要额外的请求头。

复制或新建工程

POST /createItem

复制的时候设置mode为copy,参数里设置from的来源工程名称即可。

new_job_name = 'test3'  
params = {"name": new_job_name, "mode": "copy", "from": job_name}  
response = requests.post(f'{jenkins_url}/createItem', auth=auth,params=params)

新建时params不需要mode和from参数,但需要额外提供data作为配置的值,可以取别的工程的配置直接修改。