diff --git a/test-devops-portal-pipeline.groovy b/test-devops-portal-pipeline.groovy
index a720745..64e18f7 100644
--- a/test-devops-portal-pipeline.groovy
+++ b/test-devops-portal-pipeline.groovy
@@ -99,7 +99,7 @@
             }
         }
         stage('Run Function Tests') {
-            timeout(8) {
+            timeout(20) {
                 try {
                     executeCmd(jenkinsUser, projectName, "npm run test:functional")
                 } catch (err) {
diff --git a/test-nodejs-pipeline.groovy b/test-nodejs-pipeline.groovy
deleted file mode 100644
index a720745..0000000
--- a/test-nodejs-pipeline.groovy
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
-* OSS - The DevOps Portal Testing Pipeline
-* CREDENTIALS_ID - gerrit credentials id
-**/
-
-gerrit = new com.mirantis.mk.Gerrit()
-common = new com.mirantis.mk.Common()
-
-def getProjectName(gerritRef, defaultGitRef) {
-    def refSpec
-    if (gerritRef) {
-        refSpec = gerritRef
-    } else {
-        refSpec = defaultGitRef
-    }
-    def refValue = refSpec.tokenize('/').takeRight(2).join('')
-    return "oss${BUILD_NUMBER}${refValue}"
-}
-
-def executeCmd(user, project, cmd) {
-    common.infoMsg("Starting command: ${cmd}")
-    wrap([$class: 'AnsiColorBuildWrapper']) {
-        // Docker sets HOME=/ ignoring that it have to be HOME=/opt/workspace,
-        // as `docker-compose exec` does not support to pass environment
-        // variables, then `docker exec` is used.
-        sh("docker exec --user=${user} --env=HOME=/opt/workspace ${project}_devopsportal_1 ${cmd}")
-    }
-    common.successMsg("Successfully completed: ${cmd}")
-}
-
-def gerritRef
-try {
-    gerritRef = GERRIT_REFSPEC
-} catch (MissingPropertyException e) {
-    gerritRef = null
-}
-
-def defaultGitRef, defaultGitUrl
-try {
-    defaultGitRef = DEFAULT_GIT_REF
-    defaultGitUrl = DEFAULT_GIT_URL
-} catch (MissingPropertyException e) {
-    defaultGitRef = null
-    defaultGitUrl = null
-}
-def checkouted = false
-
-node("vm") {
-    def composePath = 'docker/stack/docker-compose.yml'
-    def projectName
-    def jenkinsUser
-
-    try {
-        stage('Checkout Source Code') {
-            if (gerritRef) {
-                // job is triggered by Gerrit
-                checkouted = gerrit.gerritPatchsetCheckout ([
-                    credentialsId : CREDENTIALS_ID,
-                    withWipeOut : true,
-                ])
-             } else if(defaultGitRef && defaultGitUrl) {
-                 checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
-             }
-             if(!checkouted){
-                 throw new Exception("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
-             }
-        }
-
-        projectName = getProjectName(gerritRef, defaultGitRef)
-
-        stage('Setup Up Stack') {
-            sh("docker-compose --file ${composePath} --project-name=${projectName} pull")
-            sh("docker-compose --file ${composePath} --project-name=${projectName} up -d --force-recreate")
-            common.successMsg("Stack with the ${projectName} is started.")
-        }
-
-        def jenkinsUID = common.getJenkinsUid()
-        def jenkinsGID = common.getJenkinsGid()
-
-        jenkinsUser = "${jenkinsUID}:${jenkinsGID}"
-
-        stage('Print Environment Information') {
-            sh("docker-compose version")
-            sh("docker version")
-            executeCmd(jenkinsUser, projectName, "npm config get")
-            executeCmd(jenkinsUser, projectName, "env")
-            executeCmd(jenkinsUser, projectName, "ls -lan")
-        }
-
-        stage('Install Dependencies') {
-            executeCmd(jenkinsUser, projectName, "npm install")
-        }
-        stage('Run Linter Tests') {
-            executeCmd(jenkinsUser, projectName, "npm run lint")
-        }
-        stage('Run Unit Tests') {
-            timeout(4) {
-                executeCmd(jenkinsUser, projectName, "npm run test:unit")
-            }
-        }
-        stage('Run Function Tests') {
-            timeout(8) {
-                try {
-                    executeCmd(jenkinsUser, projectName, "npm run test:functional")
-                } catch (err) {
-                    archiveArtifacts(
-                        artifacts: "test_output/**/*.png",
-                        allowEmptyArchive: true,
-                    )
-                    throw err
-                }
-            }
-        }
-    } catch (err) {
-        currentBuild.result = 'FAILURE'
-        common.errorMsg("Build failed due to error: ${err}")
-        throw err
-    } finally {
-        common.sendNotification(currentBuild.result, "" ,["slack"])
-        stage('Cleanup') {
-            wrap([$class: 'AnsiColorBuildWrapper']) {
-                sh("docker-compose -f ${composePath} -p ${projectName} down")
-            }
-        }
-    }
-}
-
