O mesmo comando shell se comporta de maneira diferente se estiver localizado em diferentes estágios do pipeline do Jenkins

Nov 26 2020

Estou tentando executar o estágio seguinte no pipeline do Jenkins

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

Se este estágio estiver localizado na última posição (após a implantação e outras coisas), ele não retorna nada:

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

Se eu remover todos os estágios antes deste estágio e deixar apenas este no pipeline, ele retornará a saída correta com a lista de arquivos.

Notei o mesmo comportamento (quero dizer, comportamento diferente do comando shell dependendo da posição do palco no pipeline) com o seguinte comando:

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

Se este comando estiver localizado no último estágio, ele retorna um erro, como "./volumes/dags/*.py" nenhum arquivo (indica o caminho)

Considerando que, se este comando estiver localizado no único estágio do Jenkins Pipeline, o comando sed será executado contra todos os arquivos python do diretório ./volumes/dags se ele

Como pode ser?

Respostas

ValeryFludkov Nov 26 2020 at 09:10

Durante a investigação, percebi que durante a implantação os arquivos ainda não foram criados. Foi resolvido adicionando

sleep 15

antes de sed ou encontrar comandos