diff --git a/tcp_tests/managers/saltmanager.py b/tcp_tests/managers/saltmanager.py
index 226f408..84e4827 100644
--- a/tcp_tests/managers/saltmanager.py
+++ b/tcp_tests/managers/saltmanager.py
@@ -374,6 +374,29 @@
                         password=jenkins_pass)
             )
 
+    def get_cluster_jenkins_creds(self):
+        """
+        Requests cluster Jenkins's login parameters from pillars
+        :return: dict {'url': jenkins_url,
+                       'user': jenkins_user,
+                       'pass': jenkins_pass}
+        """
+        tgt = 'I@docker:client:stack:jenkins and cid01*'
+        jenkins_host = self.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:host")
+        jenkins_port = self.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:port")
+        jenkins_protocol = self.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:proto")
+        jenkins_url = '{0}://{1}:{2}'.format(jenkins_protocol,
+                                             jenkins_host,
+                                             jenkins_port)
+        jenkins_user = self.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:username")
+        jenkins_pass = self.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:password")
+        return {'url': jenkins_url, 'user': jenkins_user, 'pass': jenkins_pass}
+
     def create_env_jenkins_cicd(self):
         """Creates static utils/env_jenkins_cicd file"""
 
@@ -428,6 +451,11 @@
                         password=jenkins_pass)
             )
 
+    def add_cluster_reclass(self, key, value, path):
+        # TODO : add reclass tools as a library to tcp-qa
+        self.cmd_run('I@salt:master',
+                     "reclass-tools add-key {key} {value} {path}")
+
     def create_env_k8s(self):
         """Creates static utils/env_k8s file"""
 
diff --git a/tcp_tests/tests/system/test_update.py b/tcp_tests/tests/system/test_update.py
new file mode 100644
index 0000000..3db5a74
--- /dev/null
+++ b/tcp_tests/tests/system/test_update.py
@@ -0,0 +1,139 @@
+import pytest
+
+from tcp_tests import logger
+from tcp_tests import settings
+from tcp_tests.utils import run_jenkins_job
+from tcp_tests.utils import get_jenkins_job_stages
+
+LOG = logger.logger
+
+
+class TestUpdateMcpCluster(object):
+    """
+    Following the steps in
+    https://docs.mirantis.com/mcp/q4-18/mcp-operations-guide/update-upgrade/minor-update.html#minor-update
+    """
+
+    @pytest.mark.grab_versions
+    @pytest.mark.parametrize("_", [settings.ENV_NAME])
+    @pytest.mark.run_mcp_update
+    def test_update_drivetrain(self, salt_actions, show_step, _):
+        """Updating DriveTrain component to release/proposed/2019.2.0 version
+
+        Scenario:
+            1. Get CICD Jenkins access credentials from salt
+            2. Run job git-mirror-downstream-mk-pipelines
+            3. Run job git-mirror-downstream-pipeline-library
+            4. If jobs are passed then start 'Deploy - upgrade MCP Drivetrain'
+
+        Duration: ~35 min
+        """
+        salt = salt_actions
+        jenkins_creds = salt.get_cluster_jenkins_creds()
+
+        # #################### Login Jenkins on cid01 node ###################
+        show_step(1)
+
+        jenkins_url = jenkins_creds.get('url')
+        jenkins_user = jenkins_creds.get('user')
+        jenkins_pass = jenkins_creds.get('pass')
+        jenkins_start_timeout = 60
+        jenkins_build_timeout = 1800
+
+        # FIXME: workaround for PROD-32751
+        salt.cmd_run("cfg01*", "cd /srv/salt/reclass; git add -u && \
+                        git commit --allow-empty -m 'Cluster model update'")
+
+        # ################### Downstream mk-pipelines #########################
+        show_step(2)
+        job_name = 'git-mirror-downstream-mk-pipelines'
+        job_parameters = {
+            'BRANCHES': 'release/proposed/2019.2.0'
+        }
+        update_pipelines = run_jenkins_job.run_job(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            start_timeout=jenkins_start_timeout,
+            build_timeout=jenkins_build_timeout,
+            verbose=False,
+            job_name=job_name,
+            job_parameters=job_parameters)
+
+        (description, stages) = get_jenkins_job_stages.get_deployment_result(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            job_name=job_name,
+            build_number='lastBuild')
+
+        LOG.info(description)
+        LOG.info('\n'.join(stages))
+
+        assert update_pipelines == 'SUCCESS', "{0}\n{1}".format(
+            description, '\n'.join(stages))
+
+        # ################### Downstream pipeline-library ####################
+        show_step(3)
+        job_name = 'git-mirror-downstream-pipeline-library'
+        job_parameters = {
+            'BRANCHES': 'release/proposed/2019.2.0'
+        }
+        update_pipeline_library = run_jenkins_job.run_job(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            start_timeout=jenkins_start_timeout,
+            build_timeout=jenkins_build_timeout,
+            verbose=False,
+            job_name=job_name,
+            job_parameters=job_parameters)
+
+        (description, stages) = get_jenkins_job_stages.get_deployment_result(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            job_name=job_name,
+            build_number='lastBuild')
+
+        LOG.info(description)
+        LOG.info('\n'.join(stages))
+
+        assert update_pipeline_library == 'SUCCESS', "{0}\n{1}".format(
+            description, '\n'.join(stages))
+
+        # ################### Start 'Deploy - upgrade MCP Drivetrain' job #####
+        show_step(4)
+
+        jenkins_build_timeout = 3600
+        job_name = 'upgrade-mcp-release'
+        job_parameters = {
+            'MK_PIPELINES_REFSPEC': 'release/proposed/2019.2.0',
+            'TARGET_MCP_VERSION': '2019.2.0'
+        }
+        update_drivetrain = run_jenkins_job.run_job(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            start_timeout=jenkins_start_timeout,
+            build_timeout=jenkins_build_timeout,
+            verbose=False,
+            job_name=job_name,
+            job_parameters=job_parameters)
+
+        (description, stages) = get_jenkins_job_stages.get_deployment_result(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            job_name=job_name,
+            build_number='lastBuild')
+
+        LOG.info(description)
+        LOG.info('\n'.join(stages))
+
+        assert update_drivetrain == 'SUCCESS', "{0}\n{1}".format(
+            description, '\n'.join(stages))
+
+    @pytest.mark.run_mcp_update
+    def test_update_gluster(self):
+        pass
