当前位置: 首页 > 面试题库 >

发布条件时的声明式管道

鱼阳伯
2023-03-14
问题内容

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

问题答案:

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

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


 类似资料:
  • 问题内容: 我正在尝试获得一个如下所示的声明性管道: 问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。 有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例: 但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些

  • 问题内容: 我当前正在尝试触发现有作业,并在当前作业的工作区中接收生成的工件。 以下工作正常: 问题是,这确实需要最后一次成功的构建,这意味着如果其他一些用户设法比我更快地运行并行构建,那么我将采用他们的工件而不是我的工件。 根据此页面 ,应该有一种使用特定作业的方法: 但是,没有关于如何在声明式管道中使用它的解释或示例。 有什么提示吗? 在此先感谢您的帮助。 问题答案: 我找到了一个不错的解决方

  • 在 Vue 2.5.0 中,我们大大改进了类型声明以更好地使用默认的基于对象的 API。同时此版本也引入了一些其它变化,需要开发者作出相应的升级。阅读博客文章了解更多详情。 发布为 NPM 包的官方声明文件 静态类型系统能帮助你有效防止许多潜在的运行时错误,而且随着你的应用日渐丰满会更加显著。这就是为什么 Vue 不仅仅为 Vue core 提供了针对TypeScript的官方类型声明,还为Vue

  • 10.5. 声明式事务管理 大多数Spring用户选择声明式事务管理。这是对应用代码影响最小的选择,因此也最符合非侵入式轻量级容器的理念。 Spring的声明式事务管理是通过Spring AOP实现的,因为事务方面的代码与Spring绑定并以一种样板式风格使用,不过尽管如此,你一般并不需要理解AOP概念就可以有效地使用Spirng的声明式事务管理。 从考虑EJB CMT和Spring声明式事务管理

  • 问题内容: Jenkins声明性管道中的参数可以动态吗? 我希望选择选项值在运行时由函数填充。以下代码确实生成了选项列表,但它们似乎过时了- 可能是在我第一次运行此代码时生成的。如果AMI列表更改,则选择将保持不变。我希望每次选择都运行此命令。 EDIT 我最终使用,带有扩展选择参数。目前它不支持该参数,因此我对其进行了修改https://review.openstack.org/#q,I0c6a

  • 我正在编写一个声明性Jenkins管道脚本,以构建工件并将其发布到JFrog Artifactory 我们只有一个项目存储库,服务位于services文件夹下。所有服务都有自己的pom。xml。我们需要编写一个脚本到管道脚本,只有在服务的单个目录结构中检测到更改时,才能构建工件并将其发布到JFrog 根据客户要求,我们不能为每项服务设置单独的存储库。这里的问题是,使用下面的脚本(使用rtUploa