web-dev-qa-db-fra.com

Utilisation correcte de stash \ unstash dans un répertoire différent

Dans l'une de mes étapes, je dois copier le contenu de deux dossiers une fois la construction terminée et copier dans un répertoire différent.

Je suis en train de convertir un travail en style libre en pipeline et j'utilise le plugin de déploiement d'artefacts. En lisant, il semble que les commandes stash et unstash devraient vous aider dans ce que je veux réaliser.

Quelqu'un peut-il vérifier s'il s'agit de la bonne approche ci-dessous, s'il vous plaît?

stage('Build') {
      steps {
        sh '''
          gulp set-staging-node-env
          gulp prepare-staging-files
          gulp webpack
        '''
        stash includes: '/dist/**/*', name: 'builtSources'
        stash includes: '/config/**/*', name: 'appConfig'
        dir('/some-dir') {
          unstash 'builtSources'
          unstash 'appConfig'
        }
      }
    }

Si je change de répertoire à une étape, cela signifie-t-il que toutes les autres étapes essaieront ensuite d'exécuter des commandes à partir de ce répertoire ou qu'elles utiliseront à nouveau l'emplacement par défaut de l'espace de travail?

Merci

EDIT

J'ai réalisé que ce que je voulais réellement faire est de copier les sources construites sur un autre nœud (sous un autre système d'exploitation). Donc, dans mon extrait de code que j'ai partagé, où je change de répertoire, ce répertoire est en réalité situé sur une autre machine (nœud) que j'ai configurée.

Aurais-je besoin d'envelopper le bloc dir() avec un bloc node('my-node-name')? Je lutte pour trouver des exemples.

Merci

15
mindparse

J'espère que c'est censé être ça:

stash includes: 'dist/**/*', name: 'builtSources'

stash includes: 'config/**/*', name: 'appConfig'

où dist et config sont les répertoires dans le chemin de l'espace de travail, il doit donc s'agir d'un chemin relatif comme ci-dessus.

Reste semble correct, seulement pour mentionner que le chemin "/ some-dir" devrait être accessible en écriture à l'utilisateur jenkins (utilisateur utilisé pour exécuter le démon jenkins).

Et oui, il revient au chemin d’espace de travail qui l’y entoure (dans ce cas par défaut) lorsqu’il quitte le bloc dir.

EDIT

Ainsi, lorsque vous stockez un chemin, il est possible de le supprimer à n'importe quelle étape ultérieure du pipeline. Donc, oui, vous pouvez placer le bloc dir sous un bloc node('<nodename>').

Vous pouvez ajouter quelque chose comme ceci:

stage('Move the Build'){
  node('datahouse'){
    dir('/opt/jenkins_artifacts'){
      unstash 'builtSources'
      unstash 'appConfig'
    }
  }
}
21
rusia.inc