5
votes

Comment empêcher les étapes parallèles Jenkins dans le pipeline de créer un nouvel espace de travail?

J'ai un pipeline qui s'exécute de cette façon:

Stage 1  -----> Stage 2  ----> Stage4
clone repo  |   exec           email   
            |                  results
            --> Stage 3
                exec

Les étapes 1, 2 et 3 s'exécutent toutes à l'intérieur d'une image docker, toutes partageant un répertoire réseau pour les espaces de travail.

Mon problème est que lorsque l'étape 3 démarre, elle échoue car les fichiers clonés ne sont pas là. L'étape 3 a créé un nouvel espace de travail nommé MyJobName @ 2 et il est vide. Il semble que le problème survient uniquement lorsqu'il y a des étapes parallèles.

Comment dois-je le résoudre?


0 commentaires

4 Réponses :


0
votes

Vous pouvez regrouper plusieurs étapes en une seule étape. Ensuite, les étapes se partagent sur Workspace.

Si stage3 n'est là que pour envoyer les résultats par e-mail, vous devez utiliser des artefacts d'archive, puis envoyer les résultats par e-mail.


2 commentaires

Plusieurs étapes en une seule étape peuvent-elles avoir une exécution parallèle?


Vous pouvez suivre les étapes de l'étape 4 dans les étapes 3 et 2



0
votes

Vous pouvez définir l'espace de travail pour chaque étape séparément afin que, dans votre exemple, les étapes 2 et 4 partagent le même espace de travail. Pour l'étape 3, vous devrez définir un autre customWorkspace Le code serait le suivant:

        stage('Pipeline Test')
        {
                stage('Test')
                {
                    agent
                    {
                        node
                        {
                            customWorkspace 'workspace/justATest'
                        }
                    }
                    steps
                    {
                      //everything is executed in the workspace declared above
                    }


3 commentaires

J'utilise des pipelines déclaratifs, donc je n'ai pas l'option node . Comment le configurerais-je?


Êtes-vous sûr d'utiliser un pipeline déclaratif? Mon exemple de code peut être utilisé pour cela (Jenkinsfile) donc cela devrait fonctionner correctement.


Ne fonctionne pas, il n'a pas obéi à mon chemin configuré. J'ai essayé de définir: parallel {stage ('Hom') {agent {docker {image "$ {imageBuild}" args "$ {dockerArgs}" customWorkspace "/ var / jenkins_home / workspace / MyJobName"}}



0
votes

Eh bien, voici ma réponse originale qui échoue toujours. Mon installation utilisait une ancienne version de docker et j'obtiens toujours l'erreur:

Docker version is older than 17.12, working directory will be /var/jenkins_home/workspace/ICP-bdm-Revisao not /var/jenkins_home/workspace/ICP-bdm-Revisao@2

Je pensais que le problème était résolu, mais quand j'ai commencé à utiliser des étapes plus parallèles, le problème est revenu.

J'ai essayé ces 3 solutions et elles ont échoué

  • dir (myWorkspace) {...}
  • ws (mon espace de travail) {...}
  • nœud {customWorkspace myWorkspace}

Ma solution encore plus hacker était de changer chaque commande pour utiliser des chemins absolus ou en cd vers le répertoire avant d'exécuter chaque commande shell.


Ancienne réponse qui devrait fonctionner si vous avez un ancien docker:

Voici ma solution très hacky. Je n'ai pas pu empêcher Jenkins de créer un pipeline différent à chaque étape, donc ma solution était:

  1. Dans un premier temps, placez l'espace de travail actuel dans une variable globale appelée myWorkspace
  2. Pour chaque autre étape, insérez les commandes de l'étape dans une commande dir (myWorkspace) {...}


0 commentaires