至于Jenkins中的声明式管道,我在使用 when 关键字 时 遇到了麻烦。
我不断收到错误消息No such DSL method 'when' found among steps。我对Jenkins 2声明式管道有些陌生,并且我认为我不会将脚本化管道与声明式管道混为一谈。
No such DSL method 'when' found among steps
该管道的目标是mvn deploy在声纳运行成功后运行,并发送失败或成功的邮件通知。我只希望在master或release分支上部署工件。
mvn deploy
我遇到困难的部分在 帖子 部分。该 通知 阶段是伟大的工作。请注意,我可以在没有 when 子句的情况下使用它,但是确实需要它或等效项。
pipeline { agent any tools { maven 'M3' jdk 'JDK8' } stages { stage('Notifications') { steps { sh 'mkdir tmpPom' sh 'mv pom.xml tmpPom/pom.xml' checkout([$class: 'GitSCM', branches: [[name: 'origin/master']], doGenerateSubmoduleConfigurations: false, submoduleCfg: [], userRemoteConfigs: [[url: 'https://repository.git']]]) sh 'mvn clean test' sh 'rm pom.xml' sh 'mv tmpPom/pom.xml ../pom.xml' } } } post { success { script { currentBuild.result = 'SUCCESS' } when { branch 'master|release/*' } steps { sh 'mvn deploy' } sendNotification(recipients, null, 'https://link.to.sonar', currentBuild.result, ) } failure { script { currentBuild.result = 'FAILURE' } sendNotification(recipients, null, 'https://link.to.sonar', currentBuild.result ) } } }
在声明性管道的文档中,提到您不能when在post块中使用。when仅在stage指令内被允许。所以你可以做的是测试使用条件if的script:
when
post
if
script
post { success { script { if (${env.BRANCH_NAME} == 'master') currentBuild.result = 'SUCCESS' } } // failure block }