当前位置: 首页 > 知识库问答 >
问题:

Jenkins管道脚本错误:管道结束java.lang.NoSuchMethodError:没有找到这样的DSL方法'httpRequest'

朱海超
2023-03-14

我希望在我当前的管道脚本中获得单独的Jenkins作业< code>Backup_Precheck的最新状态。

下面是我的管道脚本。

import groovy.json.JsonSlurper

pipeline 
{
   agent any
   stages {

      stage('check Job Backup_Precheck status'){

         steps {
  
            script{
 
              if(checkStatus() == "RUNNING" ){
                  timeout(time: 60, unit: 'MINUTES') {
                       waitUntil {

                         def status = checkStatus()
                            return  (status == "SUCCESS" || status == "FAILURE" || status == "UNSTABLE" || status == "ABORTED")
                  }
            }
        }

        if( checkStatus() != "SUCCESS" ){
           error('Stopping Job Weekend_Backup becuase job Backup_Precheck is not successful.')
        } else {
      
            echo 'Triggering ansible backup automation'
                      
      } // script end
                     
     } //steps ends here
    
} // stage ends here
   

stage('Hello') {
        
    steps {  echo 'Hello World'}
    
   }
    
  } //step closes
    
}    
    
def checkStatus() {
        
def statusUrl = httpRequest "https://portal.myshop.com:9043/job/Backup_Precheck/lastBuild/api/json"
    
def statusJson = new JsonSlurper().parseText(statusUrl.getContent())
        
                    return statusJson['result']
    
    }

我在jenkins控制台日志中得到以下错误:

[Pipeline] { (Hello) Stage "Hello "由于先前的失败而被跳过[Pipeline]}[Pipeline]//Stage[Pipeline]}[Pipeline]//node[Pipeline]Pipeline的结尾Java . lang . nosuchmethodreror:在步骤[ansiColor、ansiblePlaybook、ansibleTower、ansibleTowerProjectRevision、ansibleTowerProjectSync、ansibleVault、archive、bat、build、catchError、checkout、deleteDir、Dir、dockerFingerprintFrom、dockerFingerprintFrom

我知道我可能需要我安装HTTP Request Plugin才能解决上述问题。

但是,如果不依赖HTTP Request Plugin,我就不能获得作业的最新状态吗?如果是这样,请指导我。

共有1个答案

赵俊晤
2023-03-14

有一种更简单的方法可以做到这一点。因为Jenkins是用Java实现的,而管道是在Groovy(同一个VM)中运行的,所以可以从Jenkins代码中访问每个类和函数。为了获得作业的当前构建的构建结果,您可以执行如下操作:

def job = jenkins.model.Jenkins.instance.getItemByFullName("<folder>/<job name>")
def result = job.getLastBuild().result

这种方法非常强大,可以在管道运行时对Jenkins进行大量控制。

要了解更多信息,您可以:

  • 看留档
  • 打开脚本控制台,从jenkins.model.Jenkins.instance开始,然后只[打印所有可用的方法][2]

[2]:https://bateru.com/news/2011/11/code-of-the-day-groovy-print-all-methods-of-an-object/.你可以从那里继续前进。

 类似资料:
  • 我在Jenkins管道中使用下面的Groovy脚本来调用自由风格的作业,但它最终出现了“没有这样的DSL方法‘构建’”错误。

  • 问题内容: 我在Jenkins管道中使用JSON函数并获取。我正在使用Jenkins 2.85。 任何想法如何解决这个问题? 问题答案: 使用管道实用程序步骤插件可以使用该功能。 没有此插件,您将无法使用此功能。 有关更多信息,请检查:步骤

  • 问题内容: 我正在尝试将旧样式的基于项目的工作流转换为基于Jenkins的管道。在浏览文档时,我发现有两种不同的语法分别命名为和。例如最近(2016年底)发布的Jenkins网络语法。尽管有一个新的语法版本,Jenkins仍然也支持脚本语法。 现在,我不确定这两种类型的哪种情况最合适。语法将很快被弃用吗?詹金斯管道的未来会是这样吗? 任何可以分享有关这两种语法类型的想法的人。 问题答案: 最初创建

  • 我目前正在尝试使用jenkinsfile在jenkins中实现管道,我正在windows机器上执行一个maven项目。我正在jenkins中创建一个管道作业,我已经在我的github存储库中签入了这个文件,当我在jenkins中运行作业时,我收到了以下错误。 我的jenkinsfile: 我得到下面的错误,当我运行它通过詹金斯工作-Jenkins错误: java.lang.NoSuchMethod

  • 问题内容: 我正在尝试在jenkins上实现一个阶段,以在jenkins发生故障时发送电子邮件。我做了一些类似于詹金斯记录的东西: 但是我总是得到这个错误: java.lang.NoSuchMethodError:在步骤[archive,bat,build,catchError,checkout,deleteDir,dir,dockerFingerprintFrom,dockerFingerpri

  • 我正在尝试使用 Jenkinsfile 实现一个新的 Jenkins 管道。 GIT存储库并没有在每个分支上都有一个Jenkinsfile,只是在一个特定的分支下(因为我目前正在为一个遗留存储库构建CI)。 Jenkins管道是使用以下配置创建的: 丢弃旧版本(我不想手动清理) Bitbucket webhook trigger (on push event) 来自 SCM 的管道脚本 Bitbu