def cancel_jobs(self, job_name, conditions): query = Queue(self.jenkins_server + "queue", self.server) # self.server.jobs[job_name].delete_from_queue() # method 2 for i in query.get_queue_items_for_job(job_name): if conditions in str(i._data): query.delete_item(i) logging.info(str(i) + " is deleted!")
def cancel_job(self, job_name, taskid): flag = False query = Queue("%squeue" % self.jenkins_server, self.server) for i in query._get_queue_items_for_job(job_name): if eval(i.get_parameters()["params"])["task_id"] == taskid: query.delete_item(i) flag = True break return flag
def query_items(self, nodeName): """ 判断Slave上面排队的项目 :param nodeName: Slave名称 :return: 排队的项目 """ data = [] query = Queue(self.jenkins_server + "queue", self.server) return query._data["items"]
def has_query_items(self, nodeName): """ 判断Slave上面是否有排队的项目 :param nodeName: Slave名称 :return: True/False """ query = Queue(self.jenkins_server + "queue", self.server) if nodeName in str(query._data): logging.info(nodeName + " has query items!") return True else: logging.info(nodeName + " does not have query items!") return False
def cancel_all_build(self, job_name): """ 取消一个job上面所有排队的构建 :param job_name: job名称 :return: True/False """ query = Queue(self.jenkins_server + "queue", self.server) for i in query._get_queue_items_for_job(job_name): query.delete_item(i) if len(query._get_queue_items_for_job(job_name)) == 0: return True else: return False
class TestQueue(unittest.TestCase): @classmethod def mockGetData(self, url): try: return TestQueue.URL_DATA[url] except KeyError: raise FourOhFourError(url) URL_DATA = {} URL_DATA['http://*****:*****@mock.patch.object(JenkinsBase, 'get_data', mockGetData) def setUp(self): self.J = Jenkins('http://*****:*****@mock.patch.object(JenkinsBase, 'get_data', mockGetData) def test_get_job_for_queue_item(self): item40 = self.q[40] j = item40.get_job() self.assertIsInstance(j, Job) @mock.patch.object(Queue, '_poll') def test_poll_cache(self, _poll): # only gets called once in interval q = Queue('http://localhost:8080/queue', self.J, poll_cache_timeout=1) for i in range(2): q.poll() self.assertEquals(_poll.call_count, 1) q.poll(True) # test force poll self.assertEquals(_poll.call_count, 2) # ensure it gets called again after cache timeout _poll.reset_mock() time.sleep(1.1) q.poll() self.assertTrue(_poll.called) # ensure it is disabled by default _poll.reset_mock() for i in range(2): self.q.poll() self.assertEquals(_poll.call_count, 2) self.assertIsNone(self.q.poll_cache_expires)
def setUp(self): self.J = Jenkins('http://localhost:8080') # Jenkins self.q = Queue('http://localhost:8080/queue', self.J)
def get_queue(self): queue_url = self.get_queue_url() return Queue(queue_url, self)
class TestQueue(unittest.TestCase): @classmethod def mockGetData(self, url): try: return TestQueue.URL_DATA[url] except KeyError: raise FourOhFourError(url) URL_DATA = {} URL_DATA['http://*****:*****@mock.patch.object(JenkinsBase, 'get_data', mockGetData) def setUp(self): self.J = Jenkins('http://*****:*****@mock.patch.object(JenkinsBase, 'get_data', mockGetData) def test_get_job_for_queue_item(self): item40 = self.q[40] j = item40.get_job() self.assertIsInstance(j, Job)
def get_query_taskids_from_device_bk(self, job_name): """ 获取相应job在每一个节点上面排队的taskid :param job_name: job名称 :return: device ID和对应的task ID """ query_items = {} count = 1 while count < 10: try: self.server.jobs[job_name].get_last_build()._data break except: count += 1 query = Queue(self.jenkins_server + "queue", self.server) try: for i in (query.get_queue_items_for_job(job_name) + self.get_running_objects(job_name)): i = i._data # print i if "actions" in i.keys(): for item in i["actions"]: if "parameters" in item.keys(): for value_item in item["parameters"]: if "name" in value_item and value_item[ "name"] == "params": value = eval(value_item["value"]) if job_name == self.get_jenkins_info().get( 'safety_cancel_name'): if "name" in value_item and value_item[ "name"] == "nodeName": device_ID = value_item["value"] break if job_name == self.get_jenkins_info().get( 'compatibility_job_name'): device_ID = value["nodeName"].split("_")[-1] appinfo_ID = value["appinfo_id"] server_address = value["server_address"] elif job_name == self.get_jenkins_info().get( 'safety_cancel_name'): appinfo_ID = [] first_flag = False for item in value["scanInfo"]: appinfo_ID.append(item["id"]) if not first_flag: server_address = item["server_address"] first_flag = True if device_ID not in query_items.keys(): query_items[device_ID] = [{ "id": appinfo_ID, "server_address": server_address }] else: query_items[device_ID].append({ "id": appinfo_ID, "server_address": server_address }) except NoBuildData: query_items = {} return query_items
def test_poll_cache(self, _poll): # only gets called once in interval q = Queue('http://localhost:8080/queue', self.J, poll_cache_timeout=1) for i in range(2): q.poll() self.assertEquals(_poll.call_count, 1) q.poll(True) # test force poll self.assertEquals(_poll.call_count, 2) # ensure it gets called again after cache timeout _poll.reset_mock() time.sleep(1.1) q.poll() self.assertTrue(_poll.called) # ensure it is disabled by default _poll.reset_mock() for i in range(2): self.q.poll() self.assertEquals(_poll.call_count, 2) self.assertIsNone(self.q.poll_cache_expires)