diff --git a/jenkins/__init__.py b/jenkins/__init__.py index cd14a03..0a178ce 100755 --- a/jenkins/__init__.py +++ b/jenkins/__init__.py @@ -1294,10 +1294,16 @@ class Jenkins(object): Plugin:mailer, Plugin:jquery, Plugin:antisamy-markup-formatter, Plugin:maven-plugin, Plugin:pam-auth]' ''' - return self.jenkins_open( - requests.Request( - 'POST', self._build_url(SCRIPT_TEXT), - data="script=".encode('utf-8') + quote(script).encode('utf-8'))) + magic_str = ')]}.' + print_magic_str = 'println()\nprint("{}")'.format(magic_str) + groovy = {'script': script.encode('utf-8') + print_magic_str.encode('utf-8')} + result = self.jenkins_open(requests.Request( + 'POST', self._build_url(SCRIPT_TEXT), data=groovy)) + + if not result.endswith(magic_str): + raise JenkinsException(result) + + return result[:result.rfind('\n')] def install_plugin(self, name, include_dependencies=True): '''Install a plugin and its dependencies from the Jenkins public diff --git a/tests/test_script.py b/tests/test_script.py index c73bcd6..ce8e718 100644 --- a/tests/test_script.py +++ b/tests/test_script.py @@ -1,5 +1,4 @@ from mock import patch -from six.moves.urllib.parse import quote import jenkins from tests.base import JenkinsTestBase @@ -23,7 +22,6 @@ class JenkinsScriptTest(JenkinsTestBase): self.assertEqual( jenkins_mock.call_args[0][0].url, self.make_url('scriptText')) - self.assertIn(quote('&&'), jenkins_mock.call_args[0][0].data.decode('utf8')) self._check_requests(jenkins_mock.call_args_list) @patch.object(jenkins.Jenkins, 'jenkins_open')