一尘不染

发布条件时的声明式管道

jenkins

至于Jenkins中的声明式管道,我在使用 when 关键字 遇到了麻烦。

我不断收到错误消息No such DSL method 'when' found among steps。我对Jenkins
2声明式管道有些陌生,并且我认为我不会将脚本化管道与声明式管道混为一谈。

该管道的目标是mvn deploy在声纳运行成功后运行,并发送失败或成功的邮件通知。我只希望在master或release分支上部署工件。

我遇到困难的部分在 帖子 部分。该 通知 阶段是伟大的工作。请注意,我可以在没有 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
      )
    }
  }
}

阅读 237

收藏
2020-07-25

共1个答案

一尘不染

在声明性管道的文档中,提到您不能whenpost块中使用。when仅在stage指令内被允许。所以你可以做的是测试使用条件ifscript

post {
success {
  script {
    if (${env.BRANCH_NAME} == 'master')
        currentBuild.result = 'SUCCESS'
  }
 }
// failure block
}
2020-07-25