diff --git a/tcp_tests/managers/jenkins/client.py b/tcp_tests/managers/jenkins/client.py
index 20b070e..508704f 100644
--- a/tcp_tests/managers/jenkins/client.py
+++ b/tcp_tests/managers/jenkins/client.py
@@ -6,6 +6,7 @@
 import json
 import yaml
 import requests
+import re
 
 from devops.helpers import helpers
 
@@ -259,7 +260,12 @@
 
     @retry()
     def get_build_output(self, name, build_id):
-        return self.__client.get_build_console_output(name, build_id)
+        output = self.__client.get_build_console_output(name, build_id)
+        # Clean output from any info added by addons
+        result = ''
+        for line in output.splitlines():
+            result += re.sub(r'<span.+</span>', '', line)
+        return result
 
     @retry(max_count=20, sleep_before_retry=30)
     def get_progressive_build_output(self, name, build_id, start=0):
diff --git a/tcp_tests/templates/_packer/scripts/ubuntu_packets.sh b/tcp_tests/templates/_packer/scripts/ubuntu_packets.sh
index cd29a30..23d8831 100644
--- a/tcp_tests/templates/_packer/scripts/ubuntu_packets.sh
+++ b/tcp_tests/templates/_packer/scripts/ubuntu_packets.sh
@@ -1,9 +1,10 @@
 #!/bin/bash -xe
 
-apt-get update
 
 # for Jenkins agent
-apt-get install -y openjdk-8-jre-headless
+add-apt-repository -y ppa:openjdk-r/ppa
+apt-get update
+apt-get install -y openjdk-11-jre-headless
 # for fuel-devops and tcp-qa
 apt-get install -y libyaml-dev libffi-dev libvirt-dev python-dev pkg-config vlan bridge-utils python-pip python3-pip virtualenv
 # additional tools
diff --git a/tcp_tests/utils/run_jenkins_job.py b/tcp_tests/utils/run_jenkins_job.py
index 403cc00..dee3fcb 100755
--- a/tcp_tests/utils/run_jenkins_job.py
+++ b/tcp_tests/utils/run_jenkins_job.py
@@ -128,11 +128,8 @@
         job_params.update(job_parameters)
 
     job_attempts = 2
-    count = 1
-    while (job_attempts != 0):
-        print('Attempt ' + str(count))
-        count += 1
-        job_attempts -= 1
+    for attempt in range(1, job_attempts+1):
+        print('Attempt ' + str(attempt))
         build = jenkins.run_build(job_name,
                                   job_params,
                                   verbose=verbose,
@@ -152,19 +149,24 @@
         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 result == "SUCCESS":
+            break
+
         job_log = jenkins.get_build_output(job_name, build[1])
         # Workaround for restart jobs that failed by salt-timeout errors
         # or by sporadic fail in attach disks
-        if ('SaltReqTimeoutError' not in job_log and
-                'not a block device' not in job_log):
-            break
-        else:
+        if ('SaltReqTimeoutError' in job_log or
+                'not a block device' in job_log):
             print('Job returns known infra fail!')
-
-    result = jenkins.build_info(name=build[0],
-                                build_id=build[1])['result']
-    if verbose:
-        print_build_footer(build, result, host)
+            continue
+        else:
+            # do not retry if it's not known issue
+            break
 
     return result
 
