在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
.