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 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()
Exemple #5
0
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()
Exemple #6
0
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()
    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_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()