如果同一个shell命令位于Jenkins管道的不同阶段,则其行为会有所不同



我正试图在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

如果我删除了这个阶段之前的所有阶段,只保留管道中的这个阶段,它会返回带有文件列表的正确输出。

我注意到以下命令有相同的行为(我的意思是shell命令的不同行为取决于管道中的阶段位置(:

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

如果这个命令位于最后一个阶段,它将返回错误,如"/volumes/dags/*.py";没有这样的文件(它引用路径(

而如果这个命令位于Jenkins Pipeline的唯一阶段,那么sed命令将在的所有python文件中执行/volumes/dags目录(如果是(

怎么可能呢?

在调查过程中,我意识到在部署过程中还没有创建文件。通过添加解决

sleep 15

在sed或find命令之前

最新更新