def info(self, node_name): """Display node information""" server = jenkins_server.get_jenkins_server() if node_name == 'master': node_name = '(master)' info = server.get_node_info(node_name) return info
def create(self, job_name, config_xml): """Create a job""" server = jenkins_server.get_jenkins_server() try: server.create_job(job_name, config_xml.strip()) except Exception as e: return '创建任务%s失败:%s' % (job_name, str(e)) return '创建任务%s成功' % job_name
def copy(self, from_name, to_name): """Copy a job""" server = jenkins_server.get_jenkins_server() try: server.copy_job(from_name, to_name) except Exception as e: return '复制任务%s到%s失败' % (from_name, to_name) return '复制任务%s到%s成功' % (from_name, to_name)
def delete(self, job_name): """Delete a job""" server = jenkins_server.get_jenkins_server() try: server.delete_job(job_name) except JenkinsException as e: return '删除任务' + job_name + '失败' return '删除任务%s成功' % job_name
def has(self, plugin_name): """Whether a plugin has installed""" server = jenkins_server.get_jenkins_server(type='jenkinsapi') has = server.has_plugin(plugin_name) if has: return '插件%s已安装' % plugin_name else: return '插件%s未安装' % plugin_name
def report(self, job_name, build_number): """Display test report of a build""" server = jenkins_server.get_jenkins_server() try: report = server.get_build_test_report(job_name, build_number) except JenkinsException as e: return '%s#%d不存在' % (job_name, build_number) return report
def info(self, job_name): """Display job information""" server = jenkins_server.get_jenkins_server() try: job_info = server.get_job_info(job_name) except JenkinsException as e: return '操作失败,错误信息:%s' % str(e) return job_info
def has(self, job_name): """Whether has a job """ server = jenkins_server.get_jenkins_server() exists = server.job_exists(job_name) if exists: return '任务%s存在' % job_name else: return '任务%s不存在' % job_name
def xml(self, job_name): """Display content of job's config.xml file""" server = jenkins_server.get_jenkins_server() try: config_xml = server.get_job_config(job_name) except Exception as e: return '获取任务%s的config.xml内容失败:%s' % (job_name, str(e)) return config_xml.replace(" ", "").replace("\n", "")
def env(self, job_name, build_number): """Display env vars of a build""" server = jenkins_server.get_jenkins_server() try: env = server.get_build_env_vars(job_name, build_number) except JenkinsException as e: return '%s#%d不存在' % (job_name, build_number) return env
def ls(self): """List tasks in queue""" server = jenkins_server.get_jenkins_server() queue = server.get_queue_info() print('任务ID\t%s\t原因' % '任务链接'.ljust(50)) for q in queue: print('%d\t%s\t%s' % (q['id'], q['task']['url'].ljust(50), q['why']))
def rename(self, from_name, to_name): """Rename a job""" server = jenkins_server.get_jenkins_server() try: server.rename_job(from_name, to_name) except JenkinsException as e: return '重命名%s为%s失败,错误信息:%s' % (from_name, to_name, str(e)) return '重命名%s为%s成功' % (from_name, to_name)
def info(self, job_name, build_number): """Display info of a build""" server = jenkins_server.get_jenkins_server() try: build_info = server.get_build_info(job_name, build_number) except JenkinsException as e: return '%s#%d不存在' % (job_name, build_number) return build_info
def cancle(self, queue_id): """Cancel a task in queue""" server = jenkins_server.get_jenkins_server() try: server.cancel_queue(queue_id) except Exception as e: return '取消队列中任务%d失败' % queue_id return '取消队列中任务%d成功' % queue_id
def log(self, job_name, build_number): """Display log of a build""" server = jenkins_server.get_jenkins_server() try: console_text = server.get_build_console_output(job_name, build_number) except JenkinsException as e: return '%s#%d不存在' % (job_name, build_number) return console_text
def install(self, plugin_name): """Install a plugin and its dependencies""" server = jenkins_server.get_jenkins_server() restart_required = server.install_plugin(plugin_name) if restart_required: return '插件%s安装成功,重启后生效' % plugin_name else: return '插件%s安装成功并生效' % plugin_name
def num(self, node_name): """ Display executor number of a node """ server = jenkins_server.get_jenkins_server(type="jenkinsapi") if node_name == 'master': node_name = '(master)' executors = server.get_executors(node_name) print('执行器个数为: %d' % executors.count)
def whoami(self): """ Display who am i """ server = jenkins_server.get_jenkins_server() try: i = server.get_whoami() except Exception as e: return '操作失败:连接服务器失败' return i['fullName']
def build(self, job_name, parameters=None): """Build a job""" try: server = jenkins_server.get_jenkins_server() except ConnectionError as e: return 'Error: %s' % str(e) build_number = server.build_job(job_name, parameters=parameters) next_build_number = server.get_job_info(job_name)['nextBuildNumber'] return '任务%s已加入队列,队列ID:%d,下次构建号:%d' % (job_name, build_number, next_build_number)
def ls(self): """List credentials""" server = jenkins_server.get_jenkins_server(type="jenkinsapi") credentials = server.get_credentials().credentials print('%s%s%s%s' % ('ID'.ljust(40), '名称'.ljust(30), '类型'.ljust(60), '描述')) for credential in credentials: print(credential.ljust(40), credentials[credential].displayname.ljust(30), str(type(credentials[credential])).ljust(60), credentials[credential].description)
def ls(self): """List all installed plugins""" server = jenkins_server.get_jenkins_server() plugins = server.get_plugins() plugins_list_content = '插件名称'.ljust(32) + '类型'.ljust(68) + '版本\n' plugins_list_content += '--------'.ljust(36) + '--------'.ljust( 70) + '--------\n' for key in plugins.keys(): plugins_list_content += key[0].ljust(36) + key[1].ljust( 70) + plugins[key[0]]['version'] + '\n' return plugins_list_content
def ls(self): """List nodes""" server = jenkins_server.get_jenkins_server() nodes = server.get_nodes() print('%s%s%s%s%s%s' % ('节点名称'.ljust(27), '架构'.ljust(18), '可用交换空间'.ljust(16), '可用内存空间'.ljust(15), '可用临时空间'.ljust(15), '可用磁盘空间'.ljust(20))) print( '%s%s%s%s%s%s' % ('--------'.ljust(30), '--------'.ljust(20), '--------'.ljust(20), '--------'.ljust(20), '--------'.ljust(20), '--------'.ljust(20))) for node in nodes: if node['name'] == 'master': node['name'] = '(master)' # TODO: 修复jenkinsapi的bug后,可直接调用接口 node_info = server.get_node_info(node['name']) architecture = node_info['monitorData'][ 'hudson.node_monitors.ArchitectureMonitor'] swap_space_monitor = node_info['monitorData'][ 'hudson.node_monitors.SwapSpaceMonitor'] available_swap_space = swap_space_monitor['availableSwapSpace'] total_swap_space = swap_space_monitor['totalSwapSpace'] available_physical_memory = swap_space_monitor[ 'availablePhysicalMemory'] total_physical_memory = swap_space_monitor['totalPhysicalMemory'] temporary_space = node_info['monitorData'][ 'hudson.node_monitors.TemporarySpaceMonitor']['size'] disk_space = node_info['monitorData'][ 'hudson.node_monitors.DiskSpaceMonitor']['size'] clock_diff = node_info['monitorData'][ 'hudson.node_monitors.ClockMonitor']['diff'] swap_space = str(round( available_swap_space / 1024 / 1024, 2)) + '/' + str( round(total_swap_space / 1024 / 1024, 2)) + ' MB' physical_memory = str(round(available_physical_memory/1024/1024, 2))\ + '/' + str(round(total_physical_memory/1024/1024, 2)) + ' MB' temporary = str(round(temporary_space / 1024 / 1024)) + ' MB' disk = str(round(disk_space / 1024 / 1024)) + ' MB' print('%s%s%s%s%s%s' % (node['name'].ljust(30), architecture.ljust(20), swap_space.ljust(20), physical_memory.ljust(20), temporary.ljust(20), disk.ljust(20)))
def ls(self): """List jobs""" try: server = jenkins_server.get_jenkins_server() except ConnectionError as e: return '无法连接到Jenkins master,请确认Jenkins服务已启动并可正常访问!' job_list_content = '任务名称'.ljust(26) + '类型'.ljust(28) + '链接\n' job_list_content += '--------'.ljust(30) + '--------'.ljust( 30) + '--------\n' all_jobs = server.get_all_jobs() for job in all_jobs: job_list_content += job['fullname'].ljust(30) + job[ '_class'].split('.')[-1].ljust(30) + job['url'] + '\n' return job_list_content
def search(self, key_word): """Search update center for plugins""" server = jenkins_server.get_jenkins_server(type='jenkinsapi') update_center = 'http://updates.jenkins-zh.cn/update-center.json' jsonp = requests.get(update_center).content.decode('utf-8') update_center_plugins_dict = json.loads( jsonp_to_json(jsonp))['plugins'] plugin_names = update_center_plugins_dict.keys() for plugin_name in plugin_names: if key_word in plugin_name: print('%s%s- %s' % (plugin_name.ljust(50), update_center_plugins_dict[plugin_name] ['version'].ljust(10), update_center_plugins_dict[plugin_name]['excerpt']))
def disable(self, job_name): """Disable a job""" server = jenkins_server.get_jenkins_server() server.disable_job(job_name) return '禁用任务%s成功' % job_name
def uninstall(self, plugin_name): """Uninstall a plugin""" server = jenkins_server.get_jenkins_server() server.delete_plugin(plugin_name) return '插件%s卸载成功' % plugin_name
def enable(self, job_name): """Enable a job""" server = jenkins_server.get_jenkins_server() server.enable_job(job_name) return '启用任务%s成功' % job_name
def version(self): """Display Jenkins server version""" server = jenkins_server.get_jenkins_server(type='jenkinsapi') version = server.version return 'Jenkins server version: %s' % version