title: Multiple Jenkins Nodes in Pipeline
body: <p>Currently we have a jenkins pipeline with 4 stages. Setup, Build, Deploy, Teardown. Deploy and Teardown prompt for manual user input. Because of this, we don`t want manual user input to take up an executor. So, we want to use agent none. However, when resuming, there is no guarentee we get the same jenkins workspace. Stash/unstash says it uses alot of resources, so if you have large files not to use it. Is there a way to get the exact slave, and when resuming, run back on that same slave?</p>
  
  <p>I have something like this now I also tried agent gcp at top level, and putting agent none in manual input </p>
  
  <pre><code>pipeline {
  agent none
  
   environment {
      userInput = false
   }
  
  stages {
      stage('Setup') {
          agent { node { label 'gcp' } }
          steps {
              deleteDir()
              dir('pipelines') {
                  checkout scm
              }
              dir('deployment_pipelines'){
                  git branch: __deployment_scripts_code_branch, credentialsId: 'jenkins', url: __deployment_scripts_code_repo
              }
              dir('gcp_template_core'){
                  git branch: __gcp_template_code_branch, credentialsId: 'jenkins', url: __gcp_template_code_repo
              }
              dir('control_repo'){
                   git branch: _control_repo_branch, credentialsId: 'jenkins', url: _control_repo
              }
  
              // Copy core templates to the project
              sh('bash deployment_pipelines/deployment/setup.sh gcp_template_core/gcp_foundation/ control_repo')
          }
      }
  
      stage('Build') {
          agent { node { label 'gcp' } }
          steps {
              sh('printenv') //TODO: Remove. Debug only
              sh('python deployment_pipelines/deployment/build.py control_repo --env ${_env_type_long}')
          }
      }
  
      stage('Deploy') {
          agent { node { label 'gcp' } }
          steps {
              sh('python deployment_pipelines/deployment/deploy.py control_repo --env ${_env_type_short}')
          }
      }
  
       stage('Release') {
          steps {
              agent none
              script {
                  sh('python deployment_pipelines/deployment/set_manual_approvers.py deployment_pipelines/config/production-release-approvers.yaml -o approver.txt')
                  def approvers = readFile('approver.txt')
  
                  try {
                      userInput = input(
                          message: 'Do you want to proceed with Release?',
                          submitter: approvers)
                  } catch(err) { // input false
                      //def user = err.getCauses()[0].getUser() //need script approval for getUser()
                      userInput = false
                      // echo "Aborted by [${user}]"
                  }
                  agent { node { label 'gcp' } }
                  if(userInput)
                  {
                      sh("echo 'Do Release'")
                  }
              }
          }
      }
      stage('Teardown'){
          agent { node { label 'gcp' } }
          steps {
               script {
                  def approvers = readFile('approver.txt')
  
                  try {
                      userInput = input(
                          message: 'Do you want to proceed with Teardown?',
                          submitter: approvers)
                  } catch(err) { // input false
                      //def user = err.getCauses()[0].getUser() //need script approval for getUser()
                      userInput = false
                      // echo "Aborted by [${user}]"
                  }
                  if(userInput)
                  {
                      sh("echo 'Do Teardown'")
                  }
              }
          }
      }
  }
  
  post {
      always {
          echo 'DO TEARDOWN REGARDLESS'
      }
  }
  }
  </code></pre>