2016-03-20 15 views
13

Devo essere in grado di creare una semplice richiesta HTTP POST durante le nostre build Jenkins Pipeline. Tuttavia non posso usare un semplice script di arricciatura come ho bisogno per lavorare su nodi Windows e Linux, e non voglio imporre più installazioni di strumenti sui nodi se posso evitarlo.Come posso eseguire richieste HTTP POST da uno script Jenkins Groovy?

La libreria di Groovy in uso nel plug-in Pipeline che stiamo utilizzando dovrebbe essere perfetta per questo compito. C'è un'estensione disponibile per Groovy per eseguire semplici POST chiamati http-builder, ma non posso per la vita di me capire come utilizzarlo nell'installazione Groovy di Jenkins.

Se si tenta di utilizzare Grapes Grab per utilizzarlo all'interno di uno script Pipeline, si verifica un errore in questo modo, as seen here.

@Grapes(
    @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1') 
) 

Forse Grapes Grab non è supportato nella versione in bundle degli usi di Groovy Jenkins. È possibile scaricare e aggiungere semplicemente http-builder e le sue dipendenze all'installazione di Jenkins Groovy che viene inviata ai nodi?

+0

Eventuali duplicati http://stackoverflow.com/questions/25692515/groovy-built-in-rest-http-client – KeepCalmAndCarryOn

+0

Purtroppo non - Questo ha più a che fare con il modo Jenkins si integra con esso. Non è così semplice. :/ –

+0

Pensavo avessi bisogno di parentesi - @Grapes ([@Grab (...)]) –

risposta

4

Forse mi manca qualcosa, ma perché non usare solo le librerie java standard che sono già sul classpath di jenkins?

import java.io.BufferedReader 
import java.io.InputStreamReader 
import java.io.OutputStreamWriter 
import java.net.URL 
import java.net.URLConnection 

def sendPostRequest(urlString, paramString) { 
    def url = new URL(urlString) 
    def conn = url.openConnection() 
    conn.setDoOutput(true) 
    def writer = new OutputStreamWriter(conn.getOutputStream()) 

    writer.write(paramString) 
    writer.flush() 
    String line 
    def reader = new BufferedReader(new  InputStreamReader(conn.getInputStream())) 
    while ((line = reader.readLine()) != null) { 
     println line 
    } 
    writer.close() 
    reader.close() 
} 

sendPostRequest("http://www.something.com", "param1=abc&param2=def") 
+1

Perché il plug-in Script Security non consente di chiamare il metodo URL.openConnection() – LoganMzz

28

Per Pipeline del Jenkin mi sento di raccomandare l'installazione del "HTTP-Request" plugin

E 'ben integrato in Groovy in modo da poter usare in questo modo:

def response = httpRequest "http://httpbin.org/response-headers?param1=${param1}" 
+1

Limitazione importante: non consente aggiungi l'intestazione a livello di codice. – eleven

+8

Funziona: '' httpRequest customHeaders: [[nome: 'FOO', valore: 'BAR']], url: 'http: // company.com''' – LoganMzz

Problemi correlati