最近要开发1个接口,接收到1个指令后自动触发自动化测试,虽然也可以通过shell命令做这一步,但因为目前所有构建自动化的的动作都通过jenkins完成,所以想要尝试能不能用python去控制jenkins构建job。还真有!万能的python。想起来一句话,有趣的事,python永远不会缺席!
通过jenkins-python实现在后台操作jenkins构建job,只需要5步,并且前面4步都是简单的配置,用python代码实现操作也只有不到20行代码,很简单
step1:在jenkins中创建1个测试job
step2:查看Jenkins的User Id,并记录下来,等下配置python脚本时需要用到
step3:jenkins生成api-token,记录token至1个文档中,后面要用到
点击【保存】
step4:安装python-jenkins库
命令行安装
1 sudo pip install python-jenkins
pythonCharm安装:
当前使用的python-jenkins版本是1.5.0
接下来通过python脚本尝试构建一个jenkins项目
代码示例:
通过这个小示例,感觉用python-jenkins还是可以非常方便在的在后台操作jenkins的。
1 #导入依赖 2 import jenkins 3 4 #定义远程的jenkins master server 的url,以及port 5 jenkins_server_url = 'http://10.1.71.51:8080/jenkins' 6 7 #定义用户的Userid 和 api token 8 user_id = 'admin' 9 api_token = '11a7a8151dbde5173fa19b346ad46b5efe' 10 11 #实例化jenkins对象,连接远程的jenkins master server 12 server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token) 13 #打印一下server查是否连接成功 14 # print(server) #返回一个jenkins对象<jenkins.Jenkins object at 0x10807d190> 15 16 # 构建job名为testJob的job(不带构建参数) 17 # server.build_job('testJob') 18 19 #查看某个job的构建信息 20 job_info=server.get_job_info('testJob') 21 # print(job_info) 22 23 #获取job名为testJob的job的最后次构建号 24 lastbuildNumber=server.get_job_info('testJob')['lastBuild']['number'] 25 26 #获取job名为testJob的job的最后1次构建的执行结果状态 27 result =server.get_build_info('testJob',lastbuildNumber)['result'] 28 29 #判断testJob是否还在构建中 30 status = server.get_build_info('testJob',lastbuildNumber)['building'] 31 print(status)
我们可以打印job_info可以一下会看到什么信息:
可以很明显看出来,get_job_info('job_name')返回的是整个job的构建信息
job_info=server.get_job_info('testJob')
1 {
2 '_class': 'hudson.model.FreeStyleProject',
3 'actions': [
4 {
5
6 },
7 {
8
9 },
10 {
11
12 },
13 {
14 '_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'
15 }
16 ],
17 'description': '',
18 'displayName': 'testJob',
19 'displayNameOrNull': None,
20 'fullDisplayName': 'testJob',
21 'fullName': 'testJob',
22 'name': 'testJob',
23 'url': 'http: //10.1.71.51/jenkins/job/testJob/',
24 'buildable': True,
25 'builds': [
26 {
27 '_class': 'hudson.model.FreeStyleBuild',
28 'number': 25,
29 'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
30 },
31 {
32 '_class': 'hudson.model.FreeStyleBuild',
33 'number': 24,
34 'url': 'http: //10.1.71.51/jenkins/job/testJob/24/'
35 },
36 {
37 '_class': 'hudson.model.FreeStyleBuild',
38 'number': 23,
39 'url': 'http: //10.1.71.51/jenkins/job/testJob/23/'
40 }
41 ],
42 'color': 'blue',
43 'firstBuild': {
44 '_class': 'hudson.model.FreeStyleBuild',
45 'number': 1,
46 'url': 'http: //10.1.71.51/jenkins/job/testJob/1/'
47 },
48 'healthReport': [
49 {
50 'description': 'Buildstability: Norecentbuildsfailed.',
51 'iconClassName': 'icon-health-80plus',
52 'iconUrl': 'health-80plus.png',
53 'score': 100
54 }
55 ],
56 'inQueue': True,
57 'keepDependencies': False,
58 'lastBuild': {
59 '_class': 'hudson.model.FreeStyleBuild',
60 'number': 25,
61 'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
62 },
63 'lastCompletedBuild': {
64 '_class': 'hudson.model.FreeStyleBuild',
65 'number': 25,
66 'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
67 },
68 'lastFailedBuild': {
69 '_class': 'hudson.model.FreeStyleBuild',
70 'number': 7,
71 'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
72 },
73 'lastStableBuild': {
74 '_class': 'hudson.model.FreeStyleBuild',
75 'number': 25,
76 'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
77 },
78 'lastSuccessfulBuild': {
79 '_class': 'hudson.model.FreeStyleBuild',
80 'number': 25,
81 'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
82 },
83 'lastUnstableBuild': None,
84 'lastUnsuccessfulBuild': {
85 '_class': 'hudson.model.FreeStyleBuild',
86 'number': 7,
87 'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
88 },
89 'nextBuildNumber': 26,
90 'property': [
91
92 ],
93 'queueItem': {
94 '_class': 'hudson.model.Queue$WaitingItem',
95 'blocked': False,
96 'buildable': False,
97 'id': 55,
98 'inQueueSince': 1567674112446,
99 'params': '',
100 'stuck': False,
101 'task': {
102 '_class': 'hudson.model.FreeStyleProject',
103 'name': 'testJob',
104 'url': 'http: //10.1.71.51/jenkins/job/testJob/'
105 },
106 'url': 'queue/item/55/',
107 'why': 'Inthequietperiod.Expiresin4.9秒',
108 'timestamp': 1567674117446
109 },
110 'concurrentBuild': False,
111 'downstreamProjects': [
112
113 ],
114 'labelExpression': None,
115 'scm': {
116 '_class': 'hudson.scm.NullSCM'
117 },
118 'upstreamProjects': [
119
120 ]
121 }
参考文档: