Comment ré-utiliser précédemment créé de l'espace de travail à travers les étapes

Je suis confronté à un problème où j'ai deux étapes définies dans mon pipeline que les deux sont exécutés sur le même nœud et doivent être exécutés dans le même espace de travail.

La première de ces étapes s'exécute sur mon nœud maître au début, mais vers la fin des étapes définies a pour unstash quelques fichiers sur un autre nœud.

La deuxième étape a alors plus qu'à continuer sur mon maître, et s'appuie sur certains modules ont été installés à partir de la première étape.

Voici mon pipeline pour mieux expliquer:

#!groovy
pipeline {
  agent { label 'master' }
  stages {
    stage('Build') { //1. Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ
      steps {
        sh '''
          npm install
          bower install
          gulp set-staging-node-env
          gulp prepare-staging-files
          gulp webpack
        '''
        stash includes: 'dist/**/*', name: 'builtSources'
        stash includes: 'config/**/*', name: 'appConfig'
        node('Protractor') { //2. Running on vnccentos7 in /var/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ
          dir('/opt/foo/deploy/') {
            unstash 'builtSources'
            unstash 'appConfig'
          }
        }        
      }
    }
    stage('Unit Tests') {
      agent { label 'master' } //3. Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2
      steps {
        parallel (
          "Jasmine": {
            sh 'gulp karma-tests-ci'
          },
           "Mocha": {
            sh 'gulp mocha-tests'
          }
        )
      }
    }
  }
}

Comme vous pouvez le voir, j'ai ajouté des commentaires au début de chaque scène\nœud utilisé pour montrer l'jenkins sortie que je vois pour que les espaces de travail sont alloués.

Le problème, je suis confronté est que les Tests Unitaires étape échoue, il essaie d'utiliser certains nœud de modules qu'il ne peut pas trouver. Ceux-ci sont présents dans le premier espace de travail qui vient d'être créé qui est l'endroit où je veux ce stade, de continuer à l'utiliser, afin de ne pas à l'aide d'un nouveau '@2' suffixé de l'espace de travail.

Est-il un moyen de dire à l'Jenkins pour préserver déjà créé des espaces de travail dans le pipeline?

MODIFIER

Je suppose que j'ai spécifié agent {label:'master'} de nouveau dans ma prochaine étape, c'est ce cas, un nouvel espace de travail pour obtenir créé? Dois-je utiliser l' node approche à la place? Serait-ce que le même espace de travail pour s'habituer?

En fait, j'ai essayé d'utiliser node('master'){...} autour de chacune des étapes dans mes Tests Unitaires étape, mais il reste encore à utiliser le @2 suffixé espace de travail plutôt que de l'original.

J'ai vu d'autres threads de parler de la façon dont vous devriez ne pas ré-utiliser le même espace de travail que vous pouvez rencontrer des problèmes avec les verrous de fichier. Ils suggèrent plutôt de l'archive\réactivation de l'espace de travail entre les étapes.

J'ai vu aussi des approches dans lequel vous pouvez stocker le chemin d'accès de l'espace de travail dans une variable et utiliser cela plus tard sur ce qui semble bon pour mon cas, mais je nai pas trouvé de syntaxe déclarative échantillons, groovy.

EDIT 2

Maintenant, j'ai essayé quelques méthodes impliquant l'économie de l'allocation d'un espace de travail à partir de la première étape dans une variable et de l'aide dans un ws(...) directive dans les étapes ultérieures:

pipeline {
  agent { label 'master' }
  stages {
    stage('Build') {
      steps {
        script {
          def workspace = pwd()
        }
        sh '''
          npm install
          bower install
          gulp set-staging-node-env
          gulp prepare-staging-files
          gulp webpack
        '''
        stash includes: 'dist/**/*', name: 'builtSources'
        stash includes: 'config/**/*', name: 'appConfig'
        node('Protractor') {
          dir('/opt/foo/deploy/') {
            unstash 'builtSources'
            unstash 'appConfig'
          }
        }        
      }
    }
    stage('Unit Tests') {
      steps {
        parallel (
          "Jasmine": {
            node('master') {
              ws("${workspace}"){
                sh 'gulp karma-tests-ci'
              }
            }
          },
          "Mocha": {
            node('master') {
              ws("${workspace}"){
                sh 'gulp mocha-tests'
              }
            }
          }
        )
      }
      post {
        success {
          sh 'gulp combine-coverage-reports'
          sh 'gulp clean-lcov'
          publishHTML(target: [
            allowMissing: false,
            alwaysLinkToLastBuild: false,
            keepAll: false,
            reportDir: 'test/coverage',
            reportFiles: 'index.html',
            reportName: 'Test Coverage Report'
          ])
        }
      }
    }
    }
}

J'ai essayé de retirer le deuxième agent de déclaration de l'Unité de Tests stade, mais la scène est restée sur ma Rapporteur nœud qui je n'ai pas envie de faire. Donc, après les réponses\commentaires ici, j'ai ensuite utilisé nœud blocs autour de chacune de mes étapes et utilisé le ws blocs comme vous pouvez le voir,

L'étape échoue, et je peux le voir dans les journaux que ce n'est pas à l'aide de l'espace de travail allouée à partir de la première étape (sans le @ suffixes):

[Jasmine] Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2
[Pipeline] [Jasmine] {
[Pipeline] [Jasmine] ws
[Jasmine] Running in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2@2
[Pipeline] [Jasmine] {
[Pipeline] [Jasmine] sh
[Jasmine] [_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ@2@2] Running shell script
[Jasmine] + gulp karma-tests-ci
[Jasmine] [08:27:01] No gulpfile found

Même sa double suffixant avec @2, donc je ne suis pas sûr de ce que sa fais maintenant.

pouvez-vous ne pas tout simplement supprimer le deuxième "agent { label "maître"}" ? Pouvez-vous utiliser ws {} pour spécifier l'espace de travail?
Merci @gaoithe j'ai essayé mais ça ne marche pas revenir à mon nœud maître, il reste sur le Rapporteur, l'un après l'unstash opération. Voir mes modifications dans la question d'origine
Je ne peux pas utiliser un langage fort sur cette ressource, mais c'est un vrai PITA que Jenkins déclarative pipeline ne permet pas de faire cette chose en Février 2018. J'ai besoin d'implémenter une simple canalisation de flux de travail, comme la caisse des sources, de construire, d'exécuter une série de tests, l'exécution d'un autre, puis de combiner les rapports d'essais. Rien de compliqué, mais je ne suis pas en mesure de facilement exécuter mes étapes dans le même espace de travail. Comment c'est pas mis dans la conception des Pipelines à partir du sol? La plupart des projets doivent partager l'espace de travail entre certaines étapes. Cette issues.jenkins-ci.org/browse/JENKINS-47163 a été résolu comme dupliqué entre-temps.

OriginalL'auteur mindparse | 2017-05-30