def import_builds_for_job(job_pk): """ Import all Builds for a job using the job_pk. TODO: Add testing - only used by command-line tool just now. """ job = Job.objects.get(pk=job_pk) logging.info("Located job %s\n" % job) client = job.server.get_client() logging.info("Using server at %s\n" % job.server.url) jenkins_job = client.get_job(job.name) good_build_numbers = list(jenkins_job.get_build_ids()) logging.info("%s\n" % good_build_numbers) for build_number in good_build_numbers: import_build_for_job(job.pk, build_number)
def test_import_build_for_job(self): """ Import build for job should update the build with the details fetched from the Jenkins server, including fetching the artifact details. """ user = User.objects.create_user("testing") job = JobFactory.create() build = BuildFactory.create(job=job, number=5) mock_job = mock.Mock(spec=jenkinsapi.job.Job) mock_build = mock.Mock(_data={"duration": 1000}) mock_job.get_build.return_value = mock_build mock_build.get_status.return_value = "SUCCESS" mock_build.get_result_url.return_value = "http://localhost/123" mock_build.get_console.return_value = "This is the log" mock_build.get_artifacts.return_value = [] parameters = [{ "name": "BUILD_ID", "value": "" }, { "name": "REQUESTOR", "value": "testing" }] mock_build.get_actions.return_value = {"parameters": parameters} with mock.patch("jenkins.tasks.logging") as mock_logging: with mock.patch("jenkins.models.Jenkins") as mock_jenkins: mock_jenkins.return_value.get_job.return_value = mock_job result = import_build_for_job(build.pk) self.assertEqual(build.pk, result) mock_jenkins.assert_called_with(job.server.url, username=u"root", password=u"testing") mock_logging.assert_has_calls([ mock.call.info("Located job %s\n" % job), mock.call.info("Using server at %s\n" % job.server.url), mock.call.info("Processing build details for %s #5" % job) ]) build = Build.objects.get(pk=build.pk) self.assertEqual(1000, build.duration) self.assertEqual("SUCCESS", build.status) self.assertEqual("This is the log", build.console_log) self.assertEqual(parameters, build.parameters) self.assertEqual(user, build.requested_by)
def test_import_build_for_job(self): """ Import build for job should update the build with the details fetched from the Jenkins server, including fetching the artifact details. """ user = User.objects.create_user("testing") job = JobFactory.create() build = BuildFactory.create(job=job, number=5) mock_job = mock.Mock(spec=jenkinsapi.job.Job) mock_build = mock.Mock(_data={"duration": 1000}) mock_job.get_build.return_value = mock_build mock_build.get_status.return_value = "SUCCESS" mock_build.get_result_url.return_value = "http://localhost/123" mock_build.get_console.return_value = "This is the log" mock_build.get_artifacts.return_value = [] parameters = [{"name": "BUILD_ID", "value": ""}, {"name": "REQUESTOR", "value": "testing"}] mock_build.get_actions.return_value = {"parameters": parameters} with mock.patch("jenkins.tasks.logger") as mock_logger: with mock.patch("jenkins.models.Jenkins") as mock_jenkins: mock_jenkins.return_value.get_job.return_value = mock_job result = import_build_for_job(build.pk) self.assertEqual(build.pk, result) mock_jenkins.assert_called_with( job.server.url, username=u"root", password=u"testing") mock_logger.assert_has_calls( [mock.call.info("Located job %s\n" % job), mock.call.info("Using server at %s\n" % job.server.url), mock.call.info("Processing build details for %s #5" % job)]) build = Build.objects.get(pk=build.pk) self.assertEqual(1000, build.duration) self.assertEqual("SUCCESS", build.status) self.assertEqual("This is the log", build.console_log) self.assertEqual(parameters, build.parameters) self.assertEqual(user, build.requested_by)