同じシェルコマンドがJenkinsパイプラインの異なるステージにある場合、動作が異なります

Nov 26 2020

Jenkinsパイプラインで次のステージを実行しようとしています

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

このステージが最後の位置にある場合(デプロイなどの後)、何も返されません。

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

このステージの前にすべてのステージを削除し、このステージだけをパイプラインに残すと、ファイルのリストとともに正しい出力が返されます。

次のコマンドで同じ動作(パイプラインのステージ位置に応じてシェルコマンドの動作が異なることを意味します)に気づきました。

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

このコマンドが最後のステージにある場合、「。/volumes / dags / *。py」のようなエラーが返されます。そのようなファイルはありません(パスを引用します)

一方、このコマンドがJenkins Pipelineの唯一のステージにある場合、sedコマンドは./volumes/dagsディレクトリのすべてのPythonファイルに対して実行されます。

どうすればいいですか?

回答

ValeryFludkov Nov 26 2020 at 09:10

調査中に、デプロイ中にファイルがまだ作成されていないことに気付きました。追加することで解決しました

sleep 15

sedまたはfindコマンドの前