Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

How can I pass parameters to a scriptrunner script executed remotely through a CURL?

Ricardo Martinez
Contributor
June 11, 2021

As stated here:
https://scriptrunner.adaptavist.com/4.2.0.2/jira/builtin-scripts.html#_executing_built_in_scripts_remotely

To execute a file that already exists under a script root:

 

> curl -u admin:admin -X POST "http://<jira>/jira/rest/scriptrunner/latest/user/exec/" -H "X-Atlassian-token: no-check" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: application/json" --data-urlencode "scriptFile=foo/bar.groovy"

I can already execute a script fine, but now I need to send a parameter, through curl to my script. And how can i receive and read it in my script?

I cant seem to find a way to do it. 

1 answer

1 accepted

0 votes
Answer accepted
PD 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.
June 15, 2021

This is equivalent to pasting the content on foo/bar.groovy into the console and hitting run.

The only way to pass parameters to such a script is to use the "dynamic form" feature

Looking at browser network call when you hit run, you can see that the payload includes 2 elements. A "parameters" json and the script string or scriptPath.
2021-06-15 20_08_38-DevTools - projects-dev.qad.com_plugins_servlet_scriptrunner_admin_console.png

I haven't tried with curl, but you can try something like this

curl -u admin:admin -X POST "http://<jira>/jira/rest/scriptrunner/latest/user/exec/" 
-H "X-Atlassian-token: no-check"
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
-H "Accept: application/json"
--data-urlencode "scriptFile=foo/bar.groovy" 
--data-urlencode 'parameters={\"param1\":\"value\"}'

Not sure I have the right escaping.

I'm not a curl wizard, so maybe you can pass --data-urlencode "scriptfile=..." and some other type in the same command.

Alternatively, you could have your script file be dynamically pre-loaded with your variables.

I have the following in a shell script I use to automatically port prod data to my test instance:

folderName="TEST"

groovy=$(cat <<-EOM 2>&1
import com.atlassian.jira.component.ComponentAccessor

def mailFetchers = ComponentAccessor.serviceManager.getServices().findAll{it.serviceClass == 'com.atlassian.jira.service.services.mail.MailFetcherService'}
mailFetchers.collect{mailFetcher->
def folderName='$folder'
mailFetcher.properties.setString('foldername', folderName)
"Set foldername for mailFetcher.name to '\$folderName'"
}
EOM
)

result_code=$(echo "$groovy"| curl -s -o /dev/null -w "%{http_code}" -u "$user":"$password"
-X POST "http://127.0.0.1:8080/rest/scriptrunner/latest/user/exec/"
-H "X-Atlassian-token: no-check"
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
-H "Accept: application/json"
--data-urlencode "scriptText@-")
if [[ "$result_code" == "200" ]];then
echo " Mail Handler update successful"
else
echo " Mail Handler update was not successful. Review mail handler folders in the application"
fi
Ricardo Martinez
Contributor
June 23, 2021

Hi;

Thanks, what you said gave me the clue on how to get the curl call with the correct parameters.

The call is similar to what you were saying.

curl 'https://[jira]/rest/scriptrunner/latest/user/exec/' \
-H 'Accept: application/json' \
-H 'X-Atlassian-token: no-check' \
-H 'Content-Type: application/json' \
-u user:pswd \
--data-raw '{"script":null,"scriptPath":"testscript.groovy","parameters":{"valueToAdd":"10"}}'

 

That should do the trick.

 

Thanks a lot.

Suggest an answer

Log in or Sign up to answer
TAGS
atlassian, jira product discovery learning path, product discovery training, idea prioritization, align stakeholders, discovery to delivery, product collaboration, atlassian learning, dev process, roadmap planning, insight capture, team alignment

Elevate Your Skills with Jira Product Discovery!

Unlock your potential and learn how to use Jira Product Discovery to your advantage. You’ll have the expertise to revolutionize ideas and insights, roadmapping, engage and align teams and stakeholders, and deliver the best solutions—faster. Enroll today!

Start Learning
AUG Leaders

Atlassian Community Events