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!")
class TestQueue(unittest.TestCase): QUEUE_DATA = { 'items': [{ 'actions': [{ 'causes': [{ 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' }], 'parameters': [{ 'name': 'name1', 'value': 'value1' }, { 'name': 'node' }] }], 'blocked': False, 'buildable': True, 'buildableStartMilliseconds': 1371419916747, 'id': 42, 'inQueueSince': 1371419909428, 'params': '', 'stuck': False, 'task': { 'color': 'grey', 'name': 'klscuimkqo', 'url': 'http://localhost:8080/job/klscuimkqo/' }, 'why': 'Waiting for next available executor' }, { 'actions': [{ 'causes': [{ 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' }] }], 'blocked': False, 'buildable': True, 'buildableStartMilliseconds': 1371419911747, 'id': 41, 'inQueueSince': 1371419906327, 'params': '', 'stuck': False, 'task': { 'color': 'grey', 'name': 'vluyhzzepl', 'url': 'http://localhost:8080/job/vluyhzzepl/' }, 'why': 'Waiting for next available executor' }, { 'actions': [{ 'causes': [{ 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' }] }], 'blocked': False, 'buildable': True, 'buildableStartMilliseconds': 1371419911747, 'id': 40, 'inQueueSince': 1371419903212, 'params': '', 'stuck': False, 'task': { 'color': 'grey', 'name': 'utmebvpxrw', 'url': 'http://localhost:8080/job/utmebvpxrw/' }, 'why': 'Waiting for next available executor' }] } @classmethod def mockGetData(self, url, tree): 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_getitem(self): item40 = self.q[40] self.assertIsInstance(item40, QueueItem) @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(JenkinsBase, 'get_data', mockGetData) def test_get_queue_item_for_job(self): item40 = self.q.get_queue_items_for_job('klscuimkqo') self.assertIsInstance(item40, list) self.assertEquals(len(item40), 1) self.assertIsInstance(item40[0], QueueItem) @mock.patch.object(JenkinsBase, 'get_data', mockGetData) def test_qi_get_parameters(self): qi = self.q[42] self.assertEquals(qi.get_parameters(), { 'name1': 'value1', 'node': None })
class TestQueue(unittest.TestCase): QUEUE_DATA = { 'items': [ { 'actions': [ { 'causes': [ { 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' } ], 'parameters': [{'name': 'name1', 'value': 'value1'}, {'name': 'node'}] } ], 'blocked': False, 'buildable': True, 'buildableStartMilliseconds': 1371419916747, 'id': 42, 'inQueueSince': 1371419909428, 'params': '', 'stuck': False, 'task': { 'color': 'grey', 'name': 'klscuimkqo', 'url': 'http://localhost:8080/job/klscuimkqo/' }, 'why': 'Waiting for next available executor' }, { 'actions': [ { 'causes': [ { 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' } ] } ], 'blocked': False, 'buildable': True, 'buildableStartMilliseconds': 1371419911747, 'id': 41, 'inQueueSince': 1371419906327, 'params': '', 'stuck': False, 'task': { 'color': 'grey', 'name': 'vluyhzzepl', 'url': 'http://localhost:8080/job/vluyhzzepl/' }, 'why': 'Waiting for next available executor' }, { 'actions': [ { 'causes': [ { 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' } ] } ], 'blocked': False, 'buildable': True, 'buildableStartMilliseconds': 1371419911747, 'id': 40, 'inQueueSince': 1371419903212, 'params': '', 'stuck': False, 'task': { 'color': 'grey', 'name': 'utmebvpxrw', 'url': 'http://localhost:8080/job/utmebvpxrw/' }, 'why': 'Waiting for next available executor' } ] } @classmethod def mockGetData(self, url, tree): 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_getitem(self): item40 = self.q[40] self.assertIsInstance(item40, QueueItem) @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(JenkinsBase, 'get_data', mockGetData) def test_get_queue_item_for_job(self): item40 = self.q.get_queue_items_for_job('klscuimkqo') self.assertIsInstance(item40, list) self.assertEquals(len(item40), 1) self.assertIsInstance(item40[0], QueueItem) @mock.patch.object(JenkinsBase, 'get_data', mockGetData) def test_qi_get_parameters(self): qi = self.q[42] self.assertEquals(qi.get_parameters(), {'name1': 'value1', 'node': None})
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