【问题标题】:How to kill a stage of Jenkins Pipeline?如何杀死 Jenkins Pipeline 的一个阶段?
【发布时间】:2020-07-19 15:51:47
【问题描述】:

我有一个包含多个阶段的 Jenkins 管道,但由于某些问题,在其中一个阶段中,它可能会不必要地运行更长的时间。

我不想中止整个管道构建并跳过下一个阶段,而是想终止其他阶段不依赖的特定阶段。

有没有办法杀死 Jenkins 流水线的特定阶段?

【问题讨论】:

  • 这个长期运行的步骤究竟是如何执行的?在parallel 中还是一系列步骤中的一个?
  • 该阶段正在parallel与其他阶段一起执行。

标签: jenkins jenkins-pipeline


【解决方案1】:

您可以尝试在脚本化管道中使用“try/catch”块。即使某个阶段出现错误,Jenkins 也会继续执行下一个阶段。

node {
    stage('Example') {
        try {
            sh 'exit 1'
        }
        catch (exc) {
            echo 'Something failed, I should sound the klaxons!'
            throw
        }
    }
}

您可以在此处参考文档:https://jenkins.io/doc/book/pipeline/syntax/

【讨论】:

    【解决方案2】:

    有一些方法可以跳过一个阶段。但我不确定是否有办法杀死一个长期运行的阶段。我只需添加一个条件表达式来运行该阶段,或者您可以将超时条件包裹在 try..catch block 中,以便长时间运行不必要的阶段跳过并继续到您想要的其他阶段,如下所示。

    pipeline {
       agent any
       stages {
            stage('stage1') {
              steps {
                script {
                  try {
                      timeout(time: 2, unit: 'NANOSECONDS')
                      echo "do your stuff"
                  } catch (Exception e) {
                      echo "Ended the never ending stage and proceeding to the next stage"
                  }
                }              
              }
            }     
            stage('stage2') {
              steps {
                script {
                    echo "Hi Stage2"
                }
              }
            }           
        }
    }
    

    或检查this page for conditional step/stage。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      相关资源
      最近更新 更多