1、安装python-jenkins插件
python中有python-jenkins插件,用来实现python和Jenkins交付。
使用如下命令,安装python-jenkins
pip3 install python-jenkins
2、python连接Jenkins
python中通过jenkins模块连接Jenkins。代码如下
# Jenkins指定job的名字
job_name = "api_test"
# jenkins登录
jk = jenkins.Jenkins(url='xxx', username='xxx', password='xxx')
其中:
url:Jenkins的网址链接
username:登录Jenkins的用户名
password:该用户的密码
如果Jenkins的网站是https的方式,那么连接过程中会有证书认证。如果Jenkins的证书是自签的,那么连接可能失败。
可以在连接Jenkins之前,增加如下代码,不认证证书
import os
os.environ['PYTHONHTTPSVERIFY] = '0'
3、获取job信息
获取job的信息,使用get_job_info方法,该方法会返回job的相关信息
代码如下:
# 获取job信息
job_info = jk.get_job_info(job_name)
print(job_info)
返回job信息如下:
{
"_class":"hudson.model.FreeStyleProject",
"actions":[
{
},
{
},
{
},
{
},
{
"_class":"org.jenkinsci.plugins.displayurlapi.actions.JobDisplayAction"
},
{
"_class":"com.cloudbees.plugins.credentials.ViewCredentialsAction"
}
],
"description":"",
"displayName":"api_test",
"displayNameOrNull":null,
"fullDisplayName":"api_test",
"fullName":"api_test",
"name":"api_test",
"url":"http://localhost:8080/job/api_test/",
"buildable":true,
"builds":[
{
"_class":"hudson.model.FreeStyleBuild",
"number":60,
"url":"http://localhost:8080/job/api_test/60/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":59,
"url":"http://localhost:8080/job/api_test/59/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":58,
"url":"http://localhost:8080/job/api_test/58/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":57,
"url":"http://localhost:8080/job/api_test/57/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":56,
"url":"http://localhost:8080/job/api_test/56/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":55,
"url":"http://localhost:8080/job/api_test/55/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":54,
"url":"http://localhost:8080/job/api_test/54/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":53,
"url":"http://localhost:8080/job/api_test/53/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":52,
"url":"http://localhost:8080/job/api_test/52/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":51,
"url":"http://localhost:8080/job/api_test/51/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":50,
"url":"http://localhost:8080/job/api_test/50/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":49,
"url":"http://localhost:8080/job/api_test/49/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":48,
"url":"http://localhost:8080/job/api_test/48/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":47,
"url":"http://localhost:8080/job/api_test/47/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":46,
"url":"http://localhost:8080/job/api_test/46/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":45,
"url":"http://localhost:8080/job/api_test/45/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":44,
"url":"http://localhost:8080/job/api_test/44/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":43,
"url":"http://localhost:8080/job/api_test/43/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":42,
"url":"http://localhost:8080/job/api_test/42/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":41,
"url":"http://localhost:8080/job/api_test/41/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":40,
"url":"http://localhost:8080/job/api_test/40/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":39,
"url":"http://localhost:8080/job/api_test/39/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":38,
"url":"http://localhost:8080/job/api_test/38/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":37,
"url":"http://localhost:8080/job/api_test/37/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":36,
"url":"http://localhost:8080/job/api_test/36/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":35,
"url":"http://localhost:8080/job/api_test/35/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":34,
"url":"http://localhost:8080/job/api_test/34/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":33,
"url":"http://localhost:8080/job/api_test/33/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":32,
"url":"http://localhost:8080/job/api_test/32/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":31,
"url":"http://localhost:8080/job/api_test/31/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":30,
"url":"http://localhost:8080/job/api_test/30/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":29,
"url":"http://localhost:8080/job/api_test/29/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":28,
"url":"http://localhost:8080/job/api_test/28/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":27,
"url":"http://localhost:8080/job/api_test/27/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":26,
"url":"http://localhost:8080/job/api_test/26/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":25,
"url":"http://localhost:8080/job/api_test/25/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":24,
"url":"http://localhost:8080/job/api_test/24/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":23,
"url":"http://localhost:8080/job/api_test/23/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":22,
"url":"http://localhost:8080/job/api_test/22/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":21,
"url":"http://localhost:8080/job/api_test/21/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":20,
"url":"http://localhost:8080/job/api_test/20/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":19,
"url":"http://localhost:8080/job/api_test/19/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":18,
"url":"http://localhost:8080/job/api_test/18/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":17,
"url":"http://localhost:8080/job/api_test/17/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":16,
"url":"http://localhost:8080/job/api_test/16/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":15,
"url":"http://localhost:8080/job/api_test/15/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":14,
"url":"http://localhost:8080/job/api_test/14/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":13,
"url":"http://localhost:8080/job/api_test/13/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":12,
"url":"http://localhost:8080/job/api_test/12/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":11,
"url":"http://localhost:8080/job/api_test/11/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":10,
"url":"http://localhost:8080/job/api_test/10/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":9,
"url":"http://localhost:8080/job/api_test/9/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":8,
"url":"http://localhost:8080/job/api_test/8/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":7,
"url":"http://localhost:8080/job/api_test/7/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":6,
"url":"http://localhost:8080/job/api_test/6/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":5,
"url":"http://localhost:8080/job/api_test/5/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":4,
"url":"http://localhost:8080/job/api_test/4/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":3,
"url":"http://localhost:8080/job/api_test/3/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":2,
"url":"http://localhost:8080/job/api_test/2/"
},
{
"_class":"hudson.model.FreeStyleBuild",
"number":1,
"url":"http://localhost:8080/job/api_test/1/"
}
],
"color":"blue",
"firstBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":1,
"url":"http://localhost:8080/job/api_test/1/"
},
"healthReport":[
{
"description":"Build stability: No recent builds failed.",
"iconClassName":"icon-health-80plus",
"iconUrl":"health-80plus.png",
"score":100
}
],
"inQueue":false,
"keepDependencies":false,
"lastBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":60,
"url":"http://localhost:8080/job/api_test/60/"
},
"lastCompletedBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":60,
"url":"http://localhost:8080/job/api_test/60/"
},
"lastFailedBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":44,
"url":"http://localhost:8080/job/api_test/44/"
},
"lastStableBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":60,
"url":"http://localhost:8080/job/api_test/60/"
},
"lastSuccessfulBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":60,
"url":"http://localhost:8080/job/api_test/60/"
},
"lastUnstableBuild":null,
"lastUnsuccessfulBuild":{
"_class":"hudson.model.FreeStyleBuild",
"number":44,
"url":"http://localhost:8080/job/api_test/44/"
},
"nextBuildNumber":61,
"property":[
],
"queueItem":null,
"concurrentBuild":false,
"disabled":false,
"downstreamProjects":[
{
"_class":"hudson.model.FreeStyleProject",
"name":"send_feishu_info",
"url":"http://localhost:8080/job/send_feishu_info/",
"color":"blue"
}
],
"labelExpression":null,
"scm":{
"_class":"hudson.scm.NullSCM"
},
"upstreamProjects":[
]
}
- description:该job的描述信息
- name:该job的名字
- url:该job的URL
- builds:记录所有构建的信息。值是一个列表。每个列表参数介绍如下:
- number:构建编号
- url:构建对应的URL
- color:构建的颜色
- blue:蓝色,表示构建成功
- red:红色,表示构建失败
- concurrentBuild:是否支持并发构建。
- false:不支持
- true:支持
- lastBuild:上一次构建的信息。参数介绍如下:
- number:构建编号
- url:构建对应的URL
- lastFailedBuild:上次失败构建的信息。参数介绍如下:
- number:构建编号
- url:构建对应的URL
- lastSuccessfulBuild:上次失败构建的信息。参数介绍如下:
- number:构建编号
- url:构建对应的URL
- nextBuildNumber:下次构建的编号
- 其余参数自行了解
获取job的最后构建number,代码如下
# 获取api_test的最后构建number
last_build_number = jk.get_job_info(job_name)["lastBuild"]["number"]
print(last_build_number)
4、获取build信息
获取build信息,使用get_build_info方法,该方法返回job build的信息
代码如下:
# 获取最后一次构建的信息
last_build_info = jk.get_build_info(job_name, last_build_number)
print(last_build_info)
返回build信息如下:
{
"_class":"hudson.model.FreeStyleBuild",
"actions":[
{
"_class":"hudson.model.CauseAction",
"causes":[
{
"_class":"hudson.model.Cause$UserIdCause",
"shortDescription":"Started by user 袋鼠KK",
"userId":"likaikai",
"userName":"袋鼠KK"
}
]
},
{
},
{
},
{
"_class":"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
}
],
"artifacts":[
],
"building":false,
"description":null,
"displayName":"#60",
"duration":3263,
"estimatedDuration":3575,
"executor":null,
"fullDisplayName":"api_test #60",
"id":"60",
"inProgress":false,
"keepLog":false,
"number":60,
"queueId":138,
"result":"SUCCESS",
"timestamp":1683799694501,
"url":"http://localhost:8080/job/api_test/60/",
"builtOn":"",
"changeSet":{
"_class":"hudson.scm.EmptyChangeLogSet",
"items":[
],
"kind":null
},
"culprits":[
]
}
- building:是否在构建中。
- true:该job在构建中
- false:该job已经构建结束
- displayName:构建对策显示名称
- duration:构建持续时间,单位:秒
- fullDisplayName:构建项目名称+编号
- id:构建编号
- result:构建结果
- SUCCESS:构建成功
- FAILURE:构建失败
- url:构建对应的URL
- 其他参数自行了解
5、获取构建build的日志信息
获取构建build的日志信息,使用get_build_console_output方法,该方法返回job build的日志信息
代码如下:
# 获取最后一次构建的日志信息
result_log = rk.get_build_console_output(name=job_name, number=last_build_number)
print(result_log)
6、构建job
构建job,使用build_job方法。
代码如下:
# 构建job
jk.build_job(job_name)
7、其他操作
jenkins的其他方法,参考文档:API reference — Python Jenkins 1.8.0 documentation
457






