How to get specific value from the script runner result

Bibin August 11, 2021

Hi All, 

I got the result after running the groovy script in script runner. But I need to catch id in a  variable. 
How is it possible to catch the value of Id in a variable? 

 

import groovyx.net.http.ContentType
import groovyx.net.http.*
import static groovyx.net.http.Method.*
import groovy.json.JsonOutput
import net.sf.json.groovy.JsonSlurper
import groovy.json.JsonSlurper

//Authorization
def authString = "user:passwd".bytes.encodeBase64().toString()

def bodyJson = JsonOutput.toJson([name: "Testing Automate deployment", planKey:["key":"TP-MS"], description:"Testing REST API"])

def slurper = new groovy.json.JsonSlurper()

def http = new HTTPBuilder( 'https://bamboo-abc.com/rest/api/latest/deploy/project' )
http.request(PUT) {
headers."Authorization" = "Basic ${authString}"
body = bodyJson
requestContentType = ContentType.JSON



//response.success = { resp ->
//log.warn "Creating new delpyment project request Success! ${resp.status}"

response.failure = { resp, reader ->
log.warn "Creating new delpyment project request Success! ${resp.status}"


}

response.failure = { resp ->
log.warn "Creating new delpyment project request failed with status ${resp.status}"
log.warn resp.statusLine

}

}

 

 

[id:33587298, oid:8rpzfqhc4p5u, key:[key:33587298], name:Testing Automate deployment, planKey:[key:TP-MS], description:Testing REST API, environments:[], operations:[canView:true, canEdit:true, canDelete:true, allowedToExecute:false, canExecute:false, allowedToCreateVersion:true, allowedToSetVersionStatus:false], repositorySpecsManaged:false]

1 answer

1 accepted

Suggest an answer

Log in or Sign up to answer
0 votes
Answer accepted
Peter-Dave Sheehan
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
August 11, 2021

There are a couple of ways you can return a value from a closure (everything in the curly brace after http.request(PUT) is a closure)

You can assign the whole statement to a variable 

def myRequestOutput = http.request(PUT){...}

Then you can extract the id from that object with

def id = myRequestOutput.id

That works because the httpbuilder will automatically slurp the json into an object

The second way is to define the variable before the closure and fill it inside in a success call:

def myId
http.request(PUT){
...
response.success = {httpResponse, slurpedJson ->
myId = slurpedJson.id
}
}
Bibin August 12, 2021

Hi Peter, 

 It 's working .Thank you :) .

TAGS
AUG Leaders

Atlassian Community Events