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
,以获取所需信息,执行所需操作。