Erreur de script du pipeline Jenkins: fin du pipeline java.lang.NoSuchMethodError: aucune méthode DSL de ce type 'httpRequest' n'a été trouvée
Je souhaite obtenir le dernier statut d'un travail jenkins séparé Backup_Precheckdans mon script Pipeline actuel.
Voici mon script de pipeline.
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']
}
J'obtiens l'erreur ci-dessous dans les journaux de la console jenkins:
[Pipeline] {(Hello) Stage "Hello" ignoré en raison d'échecs précédents [Pipeline]} [Pipeline] // stage [Pipeline]} [Pipeline] // node [Pipeline] End of Pipeline java.lang.NoSuchMethodError : Aucune méthode DSL 'httpRequest' trouvée parmi les étapes [ansiColor, ansiblePlaybook, ansibleTower, ansibleTowerProjectRevision, ansibleTowerProjectSync, ansibleVault, archive, bat, build, catchError, checkout, deleteDir, dir, dockerFingerprintFrom, dockerFingerprintRun, email envVarsForTool, erreur, fileExists, findBuildScans, getContext, git, input, isUnix, junit, bibliothèque, libraryResource, charge, verrou, mail, jalon, nœud, parallèle, powershell, propriétés, publishHTML, pwd, pwsh, readFile, readTrusted, resolScm retry, script, sh, sleep, stage, stash, step, svn, task, timeout, tm, tool, unarchive, unstable, unstash, validateDeclarativePipeline, waitUntil, warnError, withContext, withCredentials, withDockerConta
Je comprends que je pourrais avoir besoin de moi pour installer le plugin de requête HTTP afin de résoudre ce qui précède.
Cependant, ne puis-je pas obtenir le dernier statut d'un emploi sans avoir à dépendre du HTTP Request Plugin? Si oui, veuillez me guider.
Réponses
Il existe un moyen plus simple de procéder. Puisque Jenkins est implémenté en Java et que le pipeline s'exécute dans Groovy (la même VM), vous pouvez accéder à chaque classe et fonction à partir du code Jenkins. Afin d'obtenir le résultat de la construction actuelle d'un travail, vous pouvez faire quelque chose comme ceci:
def job = jenkins.model.Jenkins.instance.getItemByFullName("<folder>/<job name>")
def result = job.getLastBuild().result
Cette approche est très puissante et vous donne beaucoup de contrôle sur Jenkins au moment de l'exécution de vos pipelines.
Pour en savoir plus, vous pouvez:
- Regardez la documentation
- Ouvrez la console de script, commencez par jenkins.model.Jenkins.instance et [imprimer toutes les méthodes disponibles] [2]
[2]: https://bateru.com/news/2011/11/code-of-the-day-groovy-print-all-methods-of-an-object/. Vous pouvez partir de là.