1 # -*- coding: utf-8 -*-
2
3 import jenkins
4
5
6 class TestJenkins(object):
7 def __new__(cls, *args, **kwargs):
8 server = 'http://1.1.1.1:8080/jenkins'
9 username = 'admin'
10 # 对应用户的token信息,不是明文的密码信息
11 password = 'fljljdfladoweurojlsjdfasd123'
12 server = jenkins.Jenkins(url=server, username=username, password=password)
13 instance = super(TestJenkins, cls).__new__(cls, *args, **kwargs)
14 instance.server = server
15 return instance
16
17 def __init__(self):
18 #这里的api_token是针对远程执行任务时,jenkins要验证的token的信息
19 self.api_token = 'okfine'
20
21 def jobs_count(self):
22 print(self.server.jobs_count())
23
24 def server_info(self):
25 print(self.server.server)
26
27 def get_jobs_info(self):
28 for item in self.server.get_all_jobs():
29 print('name: %s' % item['name'], 'URL: ', item['url'])
30
31 def get_whoami(self):
32 print(self.server.get_whoami(depth=10))
33
34 def get_auth(self):
35 print(self.server.auth)
36
37 def get_debug_job_info(self, name):
38 print(self.server.debug_job_info(name))
39
40 def check_job_exists(self, name):
41 print(self.server.job_exists(name))
42
43 def get_all_jobs(self):
44 print(self.server.get_all_jobs())
45
46 def create_job(self):
47 print(self.server.create_job('API-1', jenkins.RECONFIG_XML))
48 print(self.server.create_job('API-2', jenkins.RECONFIG_XML))
49
50 def delete_job(self, name):
51 print(self.server.delete_job(name))
52
53 def copy_job(self, name, new_name):
54 print(self.server.copy_job(name, new_name))
55
56 def enable_job(self, name):
57 print(self.server.enable_job(name))
58
59 def disable_job(self, name):
60 print(self.server.disable_job(name))
61
62 def reconfig_job(self, name):
63 print(self.server.reconfig_job(name, jenkins.RECONFIG_XML))
64
65 def rename_job(self, name, new_name):
66 print(self.server.rename_job(name, new_name))
67
68 def build_job(self, name, parameters):
69 print(self.server.build_job(name, parameters, token=self.api_token))
70
71 def get_job_info(self, name):
72 # 主要是通过任务的信息,来得到需要传入的参数信息,jenkins 各种自定义选项信息,单凭肉眼是很难辨别出参数信息的,
73 # 任务相关参数信息都是在property这个参数里面
74 build_arg = self.server.get_job_info(name)["property"]
75 for parameter_definitions in build_arg:
76 if len(parameter_definitions) > 1:
77 for parameter in parameter_definitions["parameterDefinitions"]:
78 print('----------------------------------')
79 print('name: %s' % parameter["name"])
80 print('class: %s' % parameter["_class"])
81 print('type: %s' % parameter["type"])
82 print('description: %s' % parameter["description"])
83 print('jenkins_arg: %s' % parameter["defaultParameterValue"]["name"])
84 print('default_value: %s' % parameter["defaultParameterValue"]["value"])
85 if parameter["_class"] == 'hudson.model.ChoiceParameterDefinition':
86 print('can_choices: %s' % parameter["choices"])
87 print('----------------------------------')
88
89 def get_build_log(self, name):
90 last_build_number = self.server.get_job_info(name)['lastCompletedBuild']['number']
91 print('last_build_number', last_build_number)
92
93 # 查看指定构建编号的输出
94 print(self.server.get_build_console_output(name, last_build_number))
95
96 def __call__(self, *args, **kwargs):
97 self.get_job_info('shop')
98
99 # 通过特定任务的信息来得到要传入的参数信息,然后再来执行构建任务
100 # build new job, nice operation
101 # 如下列所示的5个参数,就是此次构建必须提供的参数
102 param_dict = {'repository': 'ssh://git@xxxxx.com/xx/xxxx.git',
103 'profile': 'xxxx-xxx',
104 'branch': 'master',
105 'upload_nexus': False,
106 'deploy_app': False}
107
108 self.build_job('xxxxx', parameters=param_dict)
109
110
111 TestJenkins()()