La même commande shell se comporte différemment si elle est située à différentes étapes du pipeline Jenkins

Nov 26 2020

J'essaye d'exécuter l'étape suivante dans le pipeline Jenkins

        stage('RUN') {
            steps{
                dir("airflow-dags") {
                    sh "find ./volumes/dags/ -maxdepth 1 -name '*.py' -print0"
                }
            }
        }

Si cette étape est située en dernière position (après le déploiement et autres), elle ne renvoie rien:

08:56:58  Running in /home/jenkins/workspace/QA_deploy_Docker/airflow-dags
[Pipeline] {
[Pipeline] sh
08:56:59  + find ./volumes/dags/ -maxdepth 1 -name '*.py' -print0
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage

Si je supprime toutes les étapes avant cette étape et ne laisse que celle-ci dans le pipeline, il renvoie une sortie correcte avec la liste des fichiers.

J'ai remarqué le même comportement (je veux dire un comportement différent de la commande shell en fonction de la position de la scène dans le pipeline) avec la commande suivante:

sh "sed -i '/schedule_interval=/c\\ \\ \\ \\ schedule_interval=None,' ./volumes/dags/*.py"

Si cette commande est située dans la dernière étape, elle renvoie une erreur, comme "./volumes/dags/*.py" aucun fichier de ce type (il cite le chemin)

Alors que si cette commande est située dans la seule étape du pipeline Jenkins, la commande sed est exécutée contre tous les fichiers python du répertoire ./volumes/dags si elle

Comment ça peut être?

Réponses

ValeryFludkov Nov 26 2020 at 09:10

Au cours de l'enquête, j'ai réalisé que pendant le déploiement, les fichiers n'étaient pas encore créés. A été résolu en ajoutant

sleep 15

avant sed ou find commandes