【问题标题】:Jenkins: Unknown stage section "timeout" when I added a timeout section in jenkins pipeline詹金斯:当我在詹金斯管道中添加超时部分时,未知阶段部分“超时”
【发布时间】:2020-09-03 22:53:55
【问题描述】:

现在我想在 jenkins 管道中添加一个超时输入,如果 60 秒用户没有输入选择,它将跳转下一步并标记构建成功。如果用户选择''YES,将执行接下来的步骤。这是我的代码:

stage('push-image-uat') {

            timeout(time: 60, unit: 'SECONDS') {
                 input {
                     message "Publish to uat environment?"
                     ok "Yes, we should."
                     submitter "admin,anthony"
                     parameters {
                         string(name: 'CHOOSE', defaultValue: 'NO', description: 'Should I publish to uat?')
                     }
                 }
            }

            when {
                expression {
                    ${params.CHOOSE} == 'YES'
                }
            }

            steps{
                script {
                    publishToUATEnvironment = true
                }
                sh "echo \"push image uat\""
                echo "Hello, ${CHOOSE}, nice to meet you."
            }
        }

但是当我在 jenkins 中运行这个脚本时,它会出现这个错误:

Running in Durability level: MAX_SURVIVABILITY
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 57: Unknown stage section "timeout". Starting with version 0.5, steps in a stage must be in a ‘steps’ block. @ line 57, column 9.
           stage('push-image-uat') {
           ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:561)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:522)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:337)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

我应该怎么做才能修复这个错误?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    应该是这样的

    stage('push-image-uat') {
          steps {
    
            timeout(time: 60, unit: 'SECONDS') {
                 input {
                     message "Publish to uat environment?"
                     ok "Yes, we should."
                     submitter "admin,anthony"
                     parameters {
                         string(name: 'CHOOSE', defaultValue: 'NO', description: 'Should I publish to uat?')
                     }
                 }
              }
            }
         }
    

    timeout block 必须在 steps block 范围内

    对于最佳实践,声明式管道始终采用此流程

    pipeline {
      stages {
        stage(""){
          steps {
            script {
            
            }
          }
        }
      }
    }
    

    您可以在脚本块中使用try catch or timeout etc.

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      相关资源
      最近更新 更多