Der gleiche Shell-Befehl verhält sich unterschiedlich, wenn er sich in verschiedenen Phasen der Jenkins-Pipeline befindet

Nov 26 2020

Ich versuche, die folgende Phase in der Jenkins-Pipeline auszuführen

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

Befindet sich diese Phase an der letzten Position (nach der Bereitstellung und anderen Dingen), wird nichts zurückgegeben:

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

Wenn ich alle Stufen vor dieser Stufe entferne und nur diese in der Pipeline belasse, wird die korrekte Ausgabe mit der Liste der Dateien zurückgegeben.

Ich bemerkte dasselbe Verhalten (ich meine unterschiedliches Verhalten des Shell-Befehls abhängig von der Bühnenposition in der Pipeline) mit folgendem Befehl:

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

Befindet sich dieser Befehl in der letzten Phase, wird ein Fehler zurückgegeben, z. B. "./volumes/dags/*.py". Keine solche Datei (der Pfad wird angegeben)

Befindet sich dieser Befehl in der einzigen Phase der Jenkins-Pipeline, wird der Befehl sed gegen alle Python-Dateien des Verzeichnisses ./volumes/dags ausgeführt, falls dies der Fall ist

Wie es sein kann?

Antworten

ValeryFludkov Nov 26 2020 at 09:10

Während der Untersuchung habe ich festgestellt, dass während der Bereitstellung noch keine Dateien erstellt wurden. Wurde durch Hinzufügen gelöst

sleep 15

vor sed oder Befehle finden