在Jenkinsfile的步骤中找不到“何时"这样的DSL方法 [英] No such DSL method 'when' found among steps in Jenkinsfile

查看:112
本文介绍了在Jenkinsfile的步骤中找不到“何时"这样的DSL方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想执行循环中的某个阶段.我有Jenkinsfile

I want to execute some stage in loop. I have 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)
                }
              }
            }

          }
        }
      }
    }

  }
}

但是出现错误

java.lang.NoSuchMethodError:在其中未找到这样的DSL方法"when" 步骤

java.lang.NoSuchMethodError: No such DSL method 'when' found among steps

另外,此阶段的所有操作均正常.为什么我会收到此错误?

Separately all of this stage works fine. Why I got this error?

推荐答案

    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)
                        }
                    }

                }
            }
        }
    }

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

when is a directive used in the declarative pipeline definition - it won't work inside script {} block. Instead use if.

这篇关于在Jenkinsfile的步骤中找不到“何时"这样的DSL方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆