2017-10-12 3 views
0

Je suis en train de configurer les générations de pipeline Jenkins et je commence à utiliser les mêmes méthodes pour plusieurs tâches. Il est donc temps de mettre ces méthodes communes dans une bibliothèque partagée. La première fonction que j'ai créée est de mettre à jour GitHub avec le résultat de certains tests unitaires. J'ai un problème où je peux exécuter cette fonction à partir de la ligne de commande, mais quand il s'agit de l'utiliser dans Jenkins, ne semble pas marché et je ne peux pas obtenir une sortie de débogage dans la console JenkinsImpossible d'exécuter la fonction de bibliothèque Shared Groovy

Ceci est la structure des répertoires de ma bibliothèque partagée

my-project 
src 
vars 
    - getCommitId.groovy 
    - gitUpdateStatus.groovy 

la première fonction getCommitId fonctionne très bien

#!/usr/bin/env groovy 
def call() { 
    commit_id = sh script: 'git rev-parse HEAD', returnStdout: true 
    commit_id = commit_id.replaceAll("\\s","") // Remove Whitespace 
    return commit_id 
} 

Cela renvoie la valeur correcte

Ceci est gitUpdateStatus

#!/usr/bin/env groovy 
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7') 

import static groovyx.net.http.ContentType.JSON 
import static groovyx.net.http.Method.POST 
import groovyx.net.http.HTTPBuilder 


String targetUrl = 'https://api.github.com/repos/myRepo/' 
def http = new HTTPBuilder(targetUrl) 
http.request(POST) { 
    uri.path = "repo/statuses/12345678" 
    requestContentType = JSON 
    body = [state: 'success', description: 'Jenkins Unit Tests', target_url: 'http://test.co.uk', context: 'unit tests'] 
    headers.'Authorization' = "token myOauthTokenHere" 
    headers.'User-Agent' = 'Jenkins Status Update' 
    headers.Accept = 'application/json' 

    response.success = { resp, json -> 
    println "GitHub updated successfully! ${resp.status}" 
    } 

    response.failure = { resp, json -> 
    println "GitHub update Failure! ${resp.status} " + json.message 
    } 
} 

je peux courir cette fin via la ligne de commande, mais je ne vois aucun résultat lorsqu'il est exécuté comme un jenkins construire

Mon Jenkinsfile

@Library('echo-jenkins-shared')_ 
node { 
    GIT_COMMIT_ID = getGitCommitId() 
    echo "GIT COMMIT ID: ${GIT_COMMIT_ID}" 
    gitUpdateStatus(GIT_COMMIT_ID) 
} 

Est-ce que quelqu'un a des idées pour lesquelles cela ne fonctionnerait pas ou cela pourrait-il être converti juste pour utiliser des méthodes natives Groovy? tous les pointeurs appréciés

Merci

Répondre

1

Tout d'abord, je vous conseille d'utiliser comme service comme https://requestb.in pour vérifier si votre code fait effectuer des appels HTTP.

Deuxièmement, je recommande de ne pas utiliser @Grab dépendances comme HTTPBuilder à base dans les pipelines Jenkins, mais le plug-in à la place http_request, téléchargeable & installable comme .hpi: https://jenkins.io/doc/pipeline/steps/http_request/

Enfin, vous pouvez trouver un exemple d'utilité classe pour effectuer des requêtes HTTP ici: https://github.com/voyages-sncf-technologies/hesperides-jenkins-lib/blob/master/src/com/vsct/dt/hesperides/jenkins/pipelines/http/HTTPBuilderRequester.groovy Avec la raison d'être là expliqué: https://github.com/voyages-sncf-technologies/hesperides-jenkins-lib#httprequester

+0

Merci pour l'information, je peux confirmer que mon code ne fait perfo Les appels HTTP rm, ce qui est un début je suppose, GET demandes fonctionne bien, juste le POST j'ai des problèmes avec une minute – Richlewis