【问题标题】:The same shell command behaves differently if it is located in different stages of Jenkins pipeline相同的 shell 命令如果位于 Jenkins 流水线的不同阶段,其行为会有所不同
【发布时间】:2020-11-26 06:08:58
【问题描述】:

我正在尝试在 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 命令会针对 ./volumes/dags 目录下的所有 python 文件执行

怎么可能?

【问题讨论】:

    标签: shell jenkins jenkins-pipeline jenkins-groovy groovyshell


    【解决方案1】:

    在调查期间,我意识到,在部署期间尚未创建文件。 已通过添加解决

    sleep 15
    

    在 sed 或 find 命令之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      相关资源
      最近更新 更多