diff --git a/tcp_tests/utils/get_jenkins_job_stages.py b/tcp_tests/utils/get_jenkins_job_stages.py
index b28e1d2..883494f 100755
--- a/tcp_tests/utils/get_jenkins_job_stages.py
+++ b/tcp_tests/utils/get_jenkins_job_stages.py
@@ -69,15 +69,15 @@
     return parser
 
 
-def get_deployment_result(host, username, password, job_name, build_number):
+def get_deployment_result(opts):
     """Get the pipeline job result from Jenkins
 
     Get all the stages resutls from the specified job,
     show error message if present.
     """
-    jenkins = client.JenkinsClient(host=host,
-                                   username=username,
-                                   password=password)
+    jenkins = client.JenkinsClient(host=opts.host,
+                                   username=opts.username,
+                                   password=opts.password)
 
     def get_stages(nodes, indent=0, show_status=True):
         res = []
@@ -90,15 +90,15 @@
                 res.append(msg)
 
             if node['status'] != 'SUCCESS':
-                wf = jenkins.get_workflow(job_name, build_number,
+                wf = jenkins.get_workflow(opts.job_name, opts.build_number,
                                           int(node['id']))
                 if wf is not None:
                     if 'stageFlowNodes' in wf:
                         res += get_stages(wf['stageFlowNodes'], indent + 2,
                                           show_status=False)
                     elif '_links' in wf and 'log' in wf['_links']:
-                        log = jenkins.get_workflow(job_name,
-                                                   build_number,
+                        log = jenkins.get_workflow(opts.job_name,
+                                                   opts.build_number,
                                                    int(node['id']),
                                                    mode='log')
                         if "text" in log:
@@ -109,8 +109,8 @@
         return res
 
     for _ in range(3):
-        wf = jenkins.get_workflow(job_name, build_number)
-        info = jenkins.build_info(job_name, int(wf['id']))
+        wf = jenkins.get_workflow(opts.job_name, opts.build_number)
+        info = jenkins.build_info(opts.job_name, int(wf['id']))
         if info.get('result'):
             break
         time.sleep(3)
@@ -120,7 +120,7 @@
     stages = get_stages(wf['stages'], 0)
     if not stages:
         msg = wf['status'] + ":\n\n"
-        stages = [msg + jenkins.get_build_output(job_name, int(wf['id']))]
+        stages = [msg + jenkins.get_build_output(opts.job_name, int(wf['id']))]
     return (build_description, stages)
 
 
@@ -133,12 +133,7 @@
         parser.print_help()
         return 10
     else:
-        (build_description, stages) = get_deployment_result(
-            opts.host,
-            opts.username,
-            opts.password,
-            opts.job_name,
-            opts.build_number)
+        (build_description, stages) = get_deployment_result(opts)
         print(build_description)
         print('\n'.join(stages))
 
diff --git a/tcp_tests/utils/run_jenkins_job.py b/tcp_tests/utils/run_jenkins_job.py
index 86a3703..acc2e9f 100755
--- a/tcp_tests/utils/run_jenkins_job.py
+++ b/tcp_tests/utils/run_jenkins_job.py
@@ -97,10 +97,10 @@
     return parser
 
 
-def print_build_header(build, job_params, build_timeout):
+def print_build_header(build, job_params, opts):
     print('\n#############################################################')
     print('##### Building job [{0}] #{1} (timeout={2}) with the following '
-          'parameters:'.format(build[0], build[1], build_timeout))
+          'parameters:'.format(build[0], build[1], opts.build_timeout))
     print('##### ' + '\n##### '.join(
         [str(key) + ": " + str(val) for key, val in job_params.iteritems()]
     ))
@@ -114,44 +114,41 @@
     print('#############################################################\n')
 
 
-def run_job(host, username, password,
-            job_name, job_parameters=None, job_output_prefix='',
-            start_timeout=1800, build_timeout=3600 * 4, verbose=False):
+def run_job(opts):
 
     jenkins = JenkinsClient(
-        host=host,
-        username=username,
-        password=password)
+        host=opts.host,
+        username=opts.username,
+        password=opts.password)
 
-    job_params = jenkins.make_defults_params(job_name)
-    if job_parameters is not None:  # job_parameters = {}
-        job_params.update(job_parameters)
+    job_params = jenkins.make_defults_params(opts.job_name)
+    job_params.update(opts.job_parameters)
 
-    build = jenkins.run_build(job_name,
+    build = jenkins.run_build(opts.job_name,
                               job_params,
-                              verbose=verbose,
-                              timeout=start_timeout)
-    if verbose:
-        print_build_header(build, job_params, build_timeout)
+                              verbose=opts.verbose,
+                              timeout=opts.start_timeout)
+    if opts.verbose:
+        print_build_header(build, job_params, opts)
 
     try:
         jenkins.wait_end_of_build(
             name=build[0],
             build_id=build[1],
-            timeout=build_timeout,
+            timeout=opts.build_timeout,
             interval=1,
-            verbose=verbose,
-            job_output_prefix=job_output_prefix)
+            verbose=opts.verbose,
+            job_output_prefix=opts.job_output_prefix)
     except Exception as e:
         print(str(e))
         raise
 
     result = jenkins.build_info(name=build[0],
                                 build_id=build[1])['result']
-    if verbose:
-        print_build_footer(build, result, host)
+    if opts.verbose:
+        print_build_footer(build, result, opts.host)
 
-    return result
+    return EXIT_CODES.get(result, 2)
 
 
 def main(args=None):
@@ -163,8 +160,8 @@
         parser.print_help()
         return 10
     else:
-        result = run_job(opts)
-        return EXIT_CODES.get(result, 2)
+        exit_code = run_job(opts)
+        return exit_code
 
 
 if __name__ == "__main__":
