在Jenkinsfile中的步骤中找不到这样的DSL方法

mak*_*son 7 jenkins jenkins-pipeline

我想在循环中执行一些阶段.我有Jenkinsfile

pipeline {
  agent any
  tools {}
  parameters {}
  environment {}
  stages {
    stage('Execute') {
      steps {
        script {
          for (int i = 0; i < hostnameMap.size; i++) {

            hostname = hostnameMap[i]
            echo 'Executing ' + hostname

            stage('Backup previous build ' + hostname) {
              backup(hostname, env.appHome)
            }


            stage('Deploy ' + hostname) {
              when {
                expression { env.BRANCH_NAME ==~ /(dev|master)/ }
              }
              steps {
                script {
                  deploy(hostname , env.appHome, env.appName)
                }
              }
            }

            stage('Restart ' + hostname) {
              when {
                expression { env.BRANCH_NAME ==~ /(dev|master)/ }
              }
              steps {
                script {
                  restart(hostname , env.appName, env.port)
                }
              }
            }

          }
        }
      }
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

但是得到了错误

java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法

另外这个阶段的所有工作都很好.为什么我收到此错误?

mak*_*son 8

    stage('Execute') {
        steps {
            script {
                for (int i = 0; i < hostnameMap.size; i++) {
                    hostname = hostnameMap[i]
                    echo 'Executing ' + hostname

                    stage('Backup previous build ' + hostname) {
                        backup(hostname, env.appHome)
                    }

                    stage('Deploy ' + hostname) {
                        if (env.BRANCH_NAME ==~ /(dev|master)/) {
                            deploy(hostname, env.appHome, env.appName)
                        }
                    }

                    stage('Restart ' + hostname) {
                        if (env.BRANCH_NAME ==~ /(dev|master)/) {
                            restart(hostname, env.appName, env.port)
                        }
                    }

                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

when是声明性管道定义中使用的指令 - 它在脚本{}块内不起作用.而是使用if.