JENKINS - Effettuare chiamate REST usando vbscript

Jenkins permette di eseguire inquiry su diverse entità come nodi, pipeline, ecc.. Qui di seguito viene spiegato come effettuare una richiesta di informazioni con l'uso di vbscript.

 

Ho creato una semplice funzione che lavora insieme ad altre funzioni di utility, che ho scovato in rete, per la trascodifica di testo in base 64. Ci servirà per la basic authentication.

 

PREREQUISITO

Fondamentale per effettuare le chiamate REST a jenkins è farlo tramite autenticazione. Questa viene espletata tramite una user ed un token che deve essere creato sullo strumento. Il token verrà poi utilizzato come password nella chiamata.

Per la creazione del token quindi accedere alla sezione relativa allo username e selezionare la voce di menù "Configurazione" che si trova direttamente su : http(s)://<JENKINSURL>/user/<USERNAME>/configure  

Nella sezione "Token API" è possibile creare un nuovo token tramite "Add new Token" a cui è necessario associare un nome del token (una sorta di label):

Selezionando "Generate" viene generato un codice alfanumerico che rappresenta appunto in nostro token. Questo va salvato subito in quanto non più recuperabile:

questa stringa verrà utilizzata per le chiamate come password dello user.

 

FUNCTION CODE

'**********************************************************************************************************

'Function to execute REST call to Jenkins and retrieve the response as text

'**********************************************************************************************************

Function JRequest(jHomeURL, endPointClient, strUSR, strPWD, URLProxy, PORTProxy)

'jHomeURL e l'Home di Jenkins, qualcosa come "https://jenkins.company.com"

'endPointClient è l'oggetto della richiesta, l'obiettivo (ad esempio, per lo stato di MYNODE, "/computer/MYNODE/api/json?depth=0")

'URLProxy è l'URL di un eventuale PROXY, se fosse necessario (la foma è questa:  "http=proxyname.company.com")

'PORTProxy la porta del proxy (da passare sempre come stringa, esempio: "8787")

'strUSR  è lo username da utilizzare per la request

'strPWD è la password (il token di cui prima, vedi PREREQUISITO -  "<Jenkins Home URL>/user/<USERNAME>/configure")

 

Dim strRes  : strRes = ""

Dim strURL  : strURL = jHomeURL & endPointClient

Dim HttpReq : Set HttpReq = CreateObject("Msxml2.ServerXMLHTTP.6.0")

 

HttpReq.Open "POST", strURL, False

 

'Se URLProxy non è vuoto, "", significa che devo utilizzarlo

if len(URLProxy)>0 then

HttpReq.setProxy 2, URLProxy, PORTProxy  

end if

HttpReq.setRequestHeader "Authorization", "Basic "& Base64Encode(strUSR &":"& strPWD)

HttpReq.Send

strRes = HttpReq.responseText

 

Set HttpReq = Nothing

 

JRequest = strRes

End Function

'**********************************************************************************************************

'**********************************************************************************************************

'Funzione Base64Encode per codificare user and password per la basic authentication

'**********************************************************************************************************

Function Base64Encode(sText)

Dim oXML, oNode

Set oXML = CreateObject("Msxml2.DOMDocument.3.0")

Set oNode = oXML.CreateElement("base64")

oNode.dataType = "bin.base64"

oNode.nodeTypedValue = Stream_StringToBinary(sText)

Base64Encode = oNode.text

Set oNode = Nothing

Set oXML = Nothing

End Function

 

Private Function Stream_StringToBinary(Text)

Const adTypeText = 2

Const adTypeBinary = 1

Dim BinaryStream 'As New Stream

Set BinaryStream = CreateObject("ADODB.Stream")

BinaryStream.Type = adTypeText

BinaryStream.CharSet = "us-ascii"

BinaryStream.Open

BinaryStream.WriteText Text

BinaryStream.Position = 0

BinaryStream.Type = adTypeBinary

BinaryStream.Position = 0

Stream_StringToBinary = BinaryStream.Read

Set BinaryStream = Nothing

End Function

 

'*****************************************************************************************

 

JRequest è la funzione principale per eseguire la chiamata REST a jenkins e recuperare la responseText. Una volta recuparata la risposta come testo è necessario utilizzare le funzioni stringa do le espressioni regolari per estrarre le informazioni che si desidera.

L'esempio riporta come verificare lo stato di un nodo. Per far ciò si può eseguire questo pezzo di codice:

Dim strResponse

strResponse = JRequest("http://MYJENKINS.COMPANY.COM", _

                                    "/computer/MYNODE/api/json?depth=0", _

                                    "MYUSERNAME", _

                                    "MYTOKEN", _

                                    "", _

                                    "")

 

In questo esempio non faccio uso di un server proxy, infatti gli utili due argomenti sono vuoti.

 

strResponse sarà qualcosa del genere:

 

{"_class":"hudson.slaves.SlaveComputer","actions":[{}],"assignedLabels":[{"name":"MYNODE"}],"description":"","displayName":"MYNODE","executors":[{},{}],"icon":"computer-x.png","iconClassName":"icon-computer-x","idle":true,"jnlpAgent":true,"launchSupported":false,"loadStatistics":{"_class":"hudson.model.Label$1"},"manualLaunchAllowed":true,"monitorData":{},"numExecutors":1,"offline":true,"offlineCause":null,"offlineCauseReason":"","oneOffExecutors":[],"temporarilyOffline":false,"absoluteRemotePath":null}

 

Adesso non basta altro che utilizzare le funzioni di vbscript per la manipolazione di stringhe.

 

Pag: <<  <   >