【问题标题】:Cannot invoke method toInteger() on null object无法在空对象上调用方法 toInteger()
【发布时间】:2021-06-29 00:23:32
【问题描述】:

我在 Jenkinsfile 的单独 groovy 文件中有以下代码。一旦新的构建工作被解雇,它应该取消旧的构建工作。它还检查不同的分支名称。

@NonCPS
def cancelPreviousBuilds() {
  def buildNumber = env.BUILD_NUMBER.toInteger()
  def currentJob = Jenkins.instance.getItemByFullName(env.JOB_NAME)
  def currentBranch = env.BRANCH_NAME // Branch value of the current build

  // Cancel old jobs that are from the same branch
  for (def build : currentJob.builds) {
    // parse out the branch name from each job
    param = (build.getFullDisplayName().tokenize('»')[2]).tokenize(" ")[0]
      if (build.isBuilding() && build.number < buildNumber && currentBranch == param) {
        build.doStop()
    }
  }
}

但是,我的代码失败了

def buildNumber = env.BUILD_NUMBER.toInteger()

詹金斯的错误说:

java.lang.NullPointerException:无法在空对象上调用方法 toInteger()

我不能在这里使用toInteger() 吗?从回显buildNumber 这肯定是提取了内部版本号,所以我很确定它实际上不是空的。

【问题讨论】:

    标签: jenkins groovy


    【解决方案1】:

    您可以使用Integer.parseInt 将其转换为整数:

    def buildNumber = Integer.parseInt(env.BUILD_NUMBER)
    

    添加我修改的代码的sn-p:

    def currentJob  = Jenkins.instance.getItemByFullName(env.JOB_NAME)
    def buildNumber = Integer.parseInt(env.BUILD_NUMBER)
    def jobBuilds   = currentJob.getBuilds()
    
    jobBuilds.each{ build ->
    // Your condition goes here
    if (build.number < buildNumber ){
            build.doStop()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多