【问题标题】:Retry and timeout in Jenkins DSL Pipeline jobJenkins DSL Pipeline 作业中的重试和超时
【发布时间】:2021-01-27 14:40:04
【问题描述】:

我有一个在需要重试的特定环境中部署的逻辑。这个逻辑也有一些超时。所以我写了如下的DSL代码:

     Pipeline {
      stages {
       stage('Promote To Stage2 Environment') {
          options {
            timeout(time: "${env.STAGE_TIME_OUT}", unit: "HOURS")
            retry("${env.RETRY_COUNT}")
          }
          steps {
            script {
              //my logic
            }
         }
       }
     }
   }

现在,我需要执行回滚操作并需要终止管道作业,以防在特定环境中进行部署时超出重试或超时。所以我修改了代码如下:

  pipeline {
    stages {
      stage('Promote To Stage2 Environment') {
          steps {
            script {
              try {
                timeout(time: "${env.STAGE_TIME_OUT}", unit: "HOURS") {
                  retry("${env.RETRY_COUNT}") {
                    //my logic
                    }
                  }
                }
              } catch (err) {
                //Need rollback. action to be required , in case retry exceeded or timeout happen
                performRollBack('env')
                error('Deployment on Stage1 failed..... Build rolled back....')
              }
            }
          }
        }
    }
    

这是正确的方法,还是我缺少的东西。

【问题讨论】:

    标签: jenkins-pipeline jenkins-groovy jenkins-job-dsl


    【解决方案1】:

    你也可以像下面的例子:

    pipeline {
        agent any
        stages {
            stage('debug') {
                options {
                    timeout(time: 10, unit: 'SECONDS')
                    retry(2)
                }
                steps {
                    // uncomment below to check post failure  
                    sh "exit 1"
                    
                    // uncomment below to check post unsuccessful scenario
                    //sleep 100
                }
            }
        }
        post { 
            always { 
                echo 'I will execute always'
            }
            failure {
                echo 'I will execute if a failure occured'
            }
            unsuccessful {
                echo 'I will execute if a job is timedout and failed'
            }
        }
    }
    

    重试场景输出将是

    输出将是超时场景

    您可以找到更多后期构建操作here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      相关资源
      最近更新 更多