jenkins_api接口
jenkins_api接口
简介
jenkins API实际上是提供一套接口,用于外部操作jenkins服务,用于配合一些自定义的需求,比如说需要在程序运行过程中获取到jenkins的执行列表信息。
官方接口文档:
https://www.jenkins.io/doc/book/using/remote-access-api/
安装准备
pip install python-jenkins- 在使用时导入:
import jenkins
初始化jenkins链接
通过api_token
jenkins_url = 'http://127.0.0.1:8282/'
username = 'xinazhe'
jenkins_token = 'xxxxxxx'
# username是jenkins用户名,password则是该用户的token,并非密码
jk = jenkins.Jenkins(url=jenkins_url, username=username, password=jenkins_token)
api_token 获取方法:jenkins->用户设置->添加用户api_token
通过碎片凭证crumb
import jenkins
jenkins_url = 'http://127.0.0.1:8282/'
username = 'xinazhe'
jenkins_pwd='xianzhe'
# username是jenkins用户名,password:密码
jk = jenkins.Jenkins(url=jenkins_url, username=username, password=jenkins_pwd)
#新版本好像没有了 useCrumb=True
- 介绍
crumb的由来 CSRF:Cross-Site Request Forgery跨站请求伪造,是一种浏览器层面的安全漏洞。- 当用户在浏览器中使用
admin用户登录jenkins后,会保存会话信息session在浏览器中,当用户再去访问其他网站时,如果遇上恶意网站,则该恶意网站会通过js等的方式,向jenkins发送请求,由于这些请求会自动默认附带已认证用户的会话信息(比如cookie),这样会导致jenkins执行对应操作。 - 由此可得,这是一种
web安全漏洞,如果凭证信息可以从浏览器中获取,则有可能被恶意网站窃取带有登录状态的会话信息,从而被恶意调用,对jenkins服务而言,为了避免这种漏洞的发生,jenkins在请求操作时使用crumb作为凭证,且该信息不保留在session里。
crumb凭证获取方式:url = jenkins_url/crumbIssuer/api/json data_json = requests.get(url=url,auth = HTTPBasicAuth(usernam,password)) #在返回的json数据体中就带有crumb的信息
常用API调用
- 获取所有
jobs信息for info in jk.get_jobs_info(): print(info) # 获取job的url与名称
- 获取构建队列
print(jk.get_queue().keys())
- 获取
job信息# 获取job对象 my_job = jk.get_job("JOBSNAME") # 获取最后一次构建对象 print(my_job.get_last_build()) # 获取最后一次完成的构建对象 print(my_job.get_last_completed_build()) # 获取最后一次成功的构建对象 print(my_job.get_last_good_build()) # 获取最后一次失败的构建编号 print(my_job.get_last_failed_buildnumber())
- 操作
job信息
# 获取job的config
print(jk.get_config())
# 创建job
# 先获取到job的config
with open("config.xml", "w", encoding="utf-8") as f:
my = jk.get_job("JOBNAME").get_config()
f.write(my)
jk.create_job("NEWJOBNAME", open("./config.xml",encoding="utf-8").read())
# 复制job
jk.copy_job("JOBNAME", "NEWJOBNAME")
# 禁用job
my_job.disable()
# 启用job
my_job.enable()
# 重命名job
jk.rename_job("JOBNAME", "NEWJOBNAME")
# 无参构建
my_jenkins.build_job("JOBNAME")
# 有参构建
jk.build_job("JOBNAME", params={"key": "value"})
# 删除job
jk.delete_job("JOBNAME")
- 操作指定构建的
job
# 当前job对象是否在队列/构建中,myjob为job对象,即上面语句中创建的job对象
print(my_job.is_queued_or_running())
# 获取指定构建ID的对象
build_object = my_job.get_build(BUILDID)
# 获取构建对象的时间戳
print(build_object.get_timestamp())
# 获取控制台日志
print(build_object.get_console())
# 获取构建参数
print(build_object.get_params())
# 获取构建的状态
print(build_object.get_status())
# 获取构建的变更日志
print(build_object.get_changeset_items())
# 删除指定构建
my_job.delete_build(BUILDID)
总结
一般而言,都是Jenkins作为调度平台调用python函数,但是基于特殊要求,有时也需要在python代码里调用Jenkins,以获取所需信息,执行所需操作。