Jenkins-Pipeline-Skriptfehler: Ende der Pipeline java.lang.NoSuchMethodError: Keine solche DSL-Methode 'httpRequest' gefunden

Sep 14 2020

Ich möchte den neuesten Status eines separaten Jenkins-Jobs Backup_Precheckin meinem aktuellen Pipeline-Skript erhalten.

Unten ist mein Pipeline-Skript.

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']
           

}

Ich erhalte den folgenden Fehler in den Jenkins-Konsolenprotokollen:

[Pipeline] {(Hallo) Phase "Hallo" wurde aufgrund früherer Fehler übersprungen [Pipeline]} [Pipeline] // Phase [Pipeline]} [Pipeline] // Knoten [Pipeline] Ende der Pipeline java.lang.NoSuchMethodError : Keine solche DSL-Methode 'httpRequest' wurde in den Schritten [ansiColor, ansiblePlaybook, ansibleTower, ansibleTowerProjectRevision, ansibleTowerProjectSync, ansibleVault, archiviert, bat, build, catchError, checkout, deleteDir, dir, dockerFingerprintFrom, dockerFingerprintRun envVarsForTool, Fehler, fileExists, findBuildScans, getContext, git, Eingabe, isUnix, junit, Bibliothek, libraryResource, Laden, Sperren, Mail, Meilenstein, Knoten, Parallel, Powershell, Eigenschaften, PublishHTML, PwD, Pwsh, ReadFile, ReadTrusted, ResolutionScm, Wiederholen, Skript, Sh, Sleep, Stage, Stash, Step, SVN, Task, Timeout, TM, Tool, Unarchive, Instable, Unstash, ValidateDeclarativePipeline, WaitUntil, warnError, withContext, withCredentials, withDockerConta

Ich verstehe, dass ich möglicherweise das HTTP Request Plugin installieren muss, um das oben genannte Problem zu beheben.

Kann ich jedoch nicht den neuesten Status eines Jobs erhalten, ohne von dem abhängig zu sein HTTP Request Plugin? Wenn ja, führe mich bitte.

Antworten

2 smelm Sep 14 2020 at 16:12

Es gibt einen einfacheren Weg, dies zu tun. Da Jenkins in Java implementiert ist und die Pipeline in Groovy (derselben VM) ausgeführt wird, können Sie über den Jenkins-Code auf jede Klasse und Funktion zugreifen. Um das Build-Ergebnis des aktuellen Builds eines Jobs zu erhalten, können Sie Folgendes tun:

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

Dieser Ansatz ist sehr leistungsfähig und gibt Ihnen viel Kontrolle über Jenkins zur Laufzeit Ihrer Pipelines.

Um mehr darüber zu erfahren, können Sie:

  • Schauen Sie sich die Dokumentation an
  • Öffnen Sie die Skriptkonsole, beginnen Sie mit jenkins.model.Jenkins.instance und [alle verfügbaren Methoden drucken] [2]

[2]: https://bateru.com/news/2011/11/code-of-the-day-groovy-print-all-methods-of-an-object/. Sie können von dort aus weitermachen.