To samo polecenie powłoki zachowuje się inaczej, jeśli znajduje się na różnych etapach potoku Jenkinsa

Nov 26 2020

Próbuję wykonać następny etap w potoku Jenkins

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

Jeśli ten etap znajduje się na ostatniej pozycji (po wdrożeniu i innych rzeczach), nic nie zwraca:

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

Jeśli usunę wszystkie etapy przed tym etapem i pozostawię tylko ten w potoku, zwróci prawidłowe wyjście z listą plików.

Zauważyłem to samo zachowanie (mam na myśli różne zachowanie polecenia powłoki w zależności od pozycji etapu w potoku) z następującym poleceniem:

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

Jeśli to polecenie znajduje się na ostatnim etapie, zwraca błąd, na przykład „./volumes/dags/*.py” nie ma takiego pliku (cytuje ścieżkę)

Podczas gdy jeśli to polecenie znajduje się na jedynym etapie Jenkins Pipeline, to polecenie sed wykonane na wszystkich plikach Pythona w katalogu ./volumes/dags, jeśli

Jak to może być?

Odpowiedzi

ValeryFludkov Nov 26 2020 at 09:10

Podczas śledztwa zdałem sobie sprawę, że podczas wdrażania pliki nie zostały jeszcze utworzone. Został rozwiązany przez dodanie

sleep 15

przed sed lub znajdź polecenia