동일한 쉘 명령이 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 명령 전에