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.
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.
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 "Accept: application/json"
-H "X-Atlassian-token: no-check"
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
--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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.