def main(wf): command = wf.args[0] query = wf.args[1] if len(wf.args) > 1 else None interface = JenkinsInterface(wf) options = { 'set_url': interface.set_jenkins_url, 'failing': interface.get_failed_jobs, 'building': interface.get_building_jobs, 'all': interface.get_all_jobs } try: jobs = options[command](query) if not query: wf.add_item("Open Jenkins", arg=interface.get_jenkins_url(), valid=True) for job in jobs: wf.add_item(title=job.name, subtitle=job.description, modifier_subtitles={ 'ctrl': 'Trigger a build, and open' }, arg=job.url, valid=True, icon=job.image) except NoJobsFound: wf.logger.debug("Could not find any jobs for instance: %s", wf.settings['jenkins_url']) wf.add_item("Error: No jobs found") wf.send_feedback()
def main(wf): command = wf.args[0] query = wf.args[1] if len(wf.args) > 1 else None interface = JenkinsInterface(wf) options = { 'set_url': interface.set_jenkins_url, 'failing': interface.get_failed_jobs, 'building': interface.get_building_jobs, 'all': interface.get_all_jobs } try: jobs = options[command](query) if not query: wf.add_item("Open Jenkins", arg=interface.get_jenkins_url(), valid=True) for job in jobs: wf.add_item(job.name, subtitle=job.description, arg=job.url, valid=True, icon=job.image) except NoJobsFound: wf.logger.debug("Could not find any jobs for instance: %s", wf.settings['jenkins_url']) wf.add_item("Error: No jobs found") wf.send_feedback()
def test_get_all_jobs_when_no_url_set(self): mock_workflow = Mock(Workflow) mock_workflow.settings = {} interface = JenkinsInterface(mock_workflow) mock_workflow.send_feedback.side_effect = TestException() try: interface.get_all_jobs() except TestException: pass mock_workflow.send_feedback.assert_called_once()
def main(wf): command = wf.args[0].strip().replace("\\", "") if not command: check_update(wf) query = wf.args[1] if len(wf.args) > 1 else None interface = JenkinsInterface(wf) options_jobs = { 'failing': interface.get_failed_jobs, 'building': interface.get_building_jobs, 'all': interface.get_all_jobs, } options_other = { 'build': interface.build_job, 'set_url': interface.set_jenkins_url, 'login': interface.set_login, 'set_job_build_default_branch': interface.set_job_build_default_branch, 'clear_login': interface.clear_login, } action_query_jobs = options_jobs.get(command) if not action_query_jobs: action_other = options_other.get(command) if action_query_jobs: try: jobs = action_query_jobs(query) except NotSettingURL: wf.add_item('Jenkins URL not Setting. Enter jks_url', icon=ICON_WARNING) wf.send_feedback() return 0 except NotSettingLoginCredentials: wf.add_item('Jenkins Login Credentials not Setting. Enter jks_login', icon=ICON_WARNING) wf.send_feedback() return 0 if not jobs: wf.add_item('No projects found', icon=ICON_WARNING) wf.send_feedback() return 0 for job in jobs: wf.add_item(title=job.name, subtitle=job.description, arg=job.url, valid=True, icon=job.image ).add_modifier(key='ctrl', subtitle='Trigger a build') elif action_other: try: if action_other(query): wf.add_item(query, subtitle='Build Trigger Success', arg=query, valid=True) except BuildFail: wf.add_item(query, subtitle='构建失败', arg=query, valid=True) wf.send_feedback()
def main(wf): wf.setvar('WF_USERNAME', 'jenkins') command = wf.args[0] query = wf.args[1] if len(wf.args) > 1 else None interface = JenkinsInterface(wf) options = { 'set_url': interface.set_jenkins_url, 'login': interface.set_login, 'clear_login': interface.clear_login, 'failing': interface.get_failed_jobs, 'building': interface.get_building_jobs, 'all': interface.get_all_jobs } try: jobs = options[command](query) if not query: wf.add_item("Open Jenkins", arg=interface.get_jenkins_url(), valid=True) for job in jobs: item = wf.add_item(title=job.name, subtitle=job.build_infos, arg=job.last_build_url if command == 'building' else job.url, valid=True, icon=job.image) item.add_modifier( key='shift', subtitle='Open console', arg=job.last_build_url, valid=bool(job.last_build_url) ) except NoJobsFound: wf.logger.debug("Could not find any jobs for instance: %s", wf.settings['jenkins_url']) wf.add_item("Error: No jobs found") wf.send_feedback()
def setUp(self): self.workflow = Workflow() self.old_jenkins_url = self.workflow.settings.get('jenkins_url') self.workflow.settings['jenkins_url'] = JENKINS_URL self.jenkins_interface = JenkinsInterface(self.workflow)
class TestJenkinsInterface(TestCase): def setUp(self): self.workflow = Workflow() self.old_jenkins_url = self.workflow.settings.get('jenkins_url') self.workflow.settings['jenkins_url'] = JENKINS_URL self.jenkins_interface = JenkinsInterface(self.workflow) def tearDown(self): self.workflow.settings['jenkins_url'] = self.old_jenkins_url def _patch_get_with_response(self, mock_get, response): mock_response = Mock() mock_get.return_value = mock_response mock_response.json.return_value = response @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs(self, mock_get): self._patch_get_with_response(mock_get, {'jobs': [{'name': 'test'}]}) jobs = self.jenkins_interface.get_all_jobs() self.assertEqual(1, len(jobs)) @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs_finds_no_jobs_raises_error(self, mock_get): self._patch_get_with_response(mock_get, {'jobs': []}) self.assertRaises(NoJobsFound, self.jenkins_interface.get_all_jobs) @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs_filters_with_query_no_jobs_does_not_error(self, mock_get): self._patch_get_with_response(mock_get, {'jobs': []}) jobs = self.jenkins_interface.get_all_jobs(query="query") self.assertEqual(0, len(jobs)) @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs_filters_with_query(self, mock_get): self._patch_get_with_response(mock_get, { 'jobs': [ {'name': 'test one'}, {'name': 'test two'}, {'name': 'ignore one'}, {'name': 'ignore two'} ] }) query = "test" jobs = self.jenkins_interface.get_all_jobs(query=query) self.assertEqual(2, len(jobs)) self.assertTrue(all(["one" in jobs[0].name, "two" in jobs[1].name])) @patch("jenkins.jenkins_interface.web.get") def test_get_all_failing_jobs(self, mock_get): self._patch_get_with_response(mock_get, { 'jobs': [ {'name': 'test1', 'color': 'red', 'url': JENKINS_URL}, {'name': 'test2', 'color': 'blue', 'url': JENKINS_URL}, {'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL}, {'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL} ] }) jobs = self.jenkins_interface.get_failed_jobs() self.assertEqual(2, len(jobs)) self.assertEqual('test1', jobs[0].name) self.assertEqual('test4', jobs[1].name) @patch("jenkins.jenkins_interface.web.get") def test_get_all_failing_jobs_with_query(self, mock_get): self._patch_get_with_response(mock_get, { 'jobs': [ {'name': 'test1', 'color': 'red', 'url': JENKINS_URL}, {'name': 'test2', 'color': 'blue', 'url': JENKINS_URL}, {'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL}, {'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL} ] }) jobs = self.jenkins_interface.get_failed_jobs('test1') self.assertEqual(1, len(jobs)) self.assertEqual('test1', jobs[0].name) @patch("jenkins.jenkins_interface.web.get") def test_get_all_building_jobs(self, mock_get): self._patch_get_with_response(mock_get, { 'jobs': [ {'name': 'test1', 'color': 'red', 'url': JENKINS_URL}, {'name': 'test2', 'color': 'blue', 'url': JENKINS_URL}, {'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL}, {'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL}, {'name': 'test5', 'color': 'redanime', 'url': JENKINS_URL} ] }) jobs = self.jenkins_interface.get_building_jobs() self.assertEqual(2, len(jobs)) self.assertEqual('test4', jobs[0].name) self.assertEqual('test5', jobs[1].name) @patch("jenkins.jenkins_interface.web.get") def test_get_all_building_jobs_with_query(self, mock_get): self._patch_get_with_response(mock_get, { 'jobs': [ {'name': 'test1', 'color': 'red', 'url': JENKINS_URL}, {'name': 'test2', 'color': 'blue', 'url': JENKINS_URL}, {'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL}, {'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL}, {'name': 'test5', 'color': 'redanime', 'url': JENKINS_URL} ] }) jobs = self.jenkins_interface.get_building_jobs('4') self.assertEqual(1, len(jobs)) self.assertEqual('test4', jobs[0].name) def test_interface_saves_new_url(self): self.jenkins_interface.set_jenkins_url('http://new-url') self.assertEqual('http://new-url', self.workflow.settings['jenkins_url']) def test_get_all_jobs_when_no_url_set(self): mock_workflow = Mock(Workflow) mock_workflow.settings = {} interface = JenkinsInterface(mock_workflow) mock_workflow.send_feedback.side_effect = TestException() try: interface.get_all_jobs() except TestException: pass mock_workflow.send_feedback.assert_called_once()
class TestJenkinsInterface(TestCase): def setUp(self): self.workflow = Workflow() self.old_jenkins_url = self.workflow.settings.get('jenkins_url') self.workflow.settings['jenkins_url'] = JENKINS_URL self.jenkins_interface = JenkinsInterface(self.workflow) def tearDown(self): self.workflow.settings['jenkins_url'] = self.old_jenkins_url def _patch_get_with_response(self, mock_get, response): mock_response = Mock() mock_get.return_value = mock_response mock_response.json.return_value = response @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs(self, mock_get): self._patch_get_with_response(mock_get, {'jobs': [{'name': 'test'}]}) jobs = self.jenkins_interface.get_all_jobs() self.assertEqual(1, len(jobs)) @patch("jenkins.jenkins_interface.web.get") def test_get_jobs_with_subjobs(self, mock_get): response = {'jobs': [{'name': 'test', 'jobs': [{'name': 'test2'}]}]} self._patch_get_with_response(mock_get, response) jobs = self.jenkins_interface.get_all_jobs() self.assertEqual(2, len(jobs)) @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs_finds_no_jobs_raises_error(self, mock_get): self._patch_get_with_response(mock_get, {'jobs': []}) self.assertRaises(NoJobsFound, self.jenkins_interface.get_all_jobs) @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs_filters_with_query_no_jobs_does_not_error( self, mock_get): self._patch_get_with_response(mock_get, {'jobs': []}) jobs = self.jenkins_interface.get_all_jobs(query="query") self.assertEqual(0, len(jobs)) @patch("jenkins.jenkins_interface.web.get") def test_get_all_jobs_filters_with_query(self, mock_get): self._patch_get_with_response( mock_get, { 'jobs': [{ 'name': 'test one' }, { 'name': 'test two' }, { 'name': 'ignore one' }, { 'name': 'ignore two' }] }) query = "test" jobs = self.jenkins_interface.get_all_jobs(query=query) self.assertEqual(2, len(jobs)) self.assertTrue(all(["one" in jobs[0].name, "two" in jobs[1].name])) @patch("jenkins.jenkins_interface.web.get") def test_get_all_failing_jobs(self, mock_get): self._patch_get_with_response( mock_get, { 'jobs': [{ 'name': 'test1', 'color': 'red', 'url': JENKINS_URL }, { 'name': 'test2', 'color': 'blue', 'url': JENKINS_URL }, { 'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL }, { 'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL }] }) jobs = self.jenkins_interface.get_failed_jobs() self.assertEqual(2, len(jobs)) self.assertEqual('test1', jobs[0].name) self.assertEqual('test4', jobs[1].name) @patch("jenkins.jenkins_interface.web.get") def test_get_all_failing_jobs_with_query(self, mock_get): self._patch_get_with_response( mock_get, { 'jobs': [{ 'name': 'test1', 'color': 'red', 'url': JENKINS_URL }, { 'name': 'test2', 'color': 'blue', 'url': JENKINS_URL }, { 'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL }, { 'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL }] }) jobs = self.jenkins_interface.get_failed_jobs('test1') self.assertEqual(1, len(jobs)) self.assertEqual('test1', jobs[0].name) @patch("jenkins.jenkins_interface.web.get") def test_get_all_building_jobs(self, mock_get): self._patch_get_with_response( mock_get, { 'jobs': [{ 'name': 'test1', 'color': 'red', 'url': JENKINS_URL }, { 'name': 'test2', 'color': 'blue', 'url': JENKINS_URL }, { 'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL }, { 'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL }, { 'name': 'test5', 'color': 'redanime', 'url': JENKINS_URL }] }) jobs = self.jenkins_interface.get_building_jobs() self.assertEqual(2, len(jobs)) self.assertEqual('test4', jobs[0].name) self.assertEqual('test5', jobs[1].name) @patch("jenkins.jenkins_interface.web.get") def test_get_all_building_jobs_with_query(self, mock_get): self._patch_get_with_response( mock_get, { 'jobs': [{ 'name': 'test1', 'color': 'red', 'url': JENKINS_URL }, { 'name': 'test2', 'color': 'blue', 'url': JENKINS_URL }, { 'name': 'test3', 'color': 'yellow', 'url': JENKINS_URL }, { 'name': 'test4', 'color': 'redanime', 'url': JENKINS_URL }, { 'name': 'test5', 'color': 'redanime', 'url': JENKINS_URL }] }) jobs = self.jenkins_interface.get_building_jobs('4') self.assertEqual(1, len(jobs)) self.assertEqual('test4', jobs[0].name) def test_interface_saves_new_url(self): self.jenkins_interface.set_jenkins_url('http://new-url') self.assertEqual('http://new-url', self.workflow.settings['jenkins_url']) def test_get_all_jobs_when_no_url_set(self): mock_workflow = Mock(Workflow) mock_workflow.settings = {} interface = JenkinsInterface(mock_workflow) mock_workflow.send_feedback.side_effect = TestException() try: interface.get_all_jobs() except TestException: pass mock_workflow.send_feedback.assert_called_once()