logo

NJP

Jira to ServiceNow integration Scripted REST API Jira WebHook

Import · Mar 11, 2021 · article
  1. Create a scripted REST API in ServiceNow with url parameter to hold operation and issue ID.
  2. https://dev63486.service-now.com/api/125590/jiraintegration/{operation}/{id}
  3. https://dev63486.service-now.com/api/125590/jiraintegration/JiraIssueCreation/${issue.id}
  4. Create a webhook in Jira, select trigger as insert on issue, use scripted REST API endpoint.
  5. Create a Outbound REST Message to get Issue details from Jira.
  6. https://xxxxxx.atlassian.net/rest/api/3/issue/${issueID}
  7. Create incident in ServiceNow based on issue details.

Note : Scripted REST API has authentication set to not required.

In order to allow ServiceNow to access Jira API API token has to be setup on Jira side.

Jira API documentation : The Jira Cloud platform REST API (atlassian.com)

Jira API token documentation : Manage API tokens for your Atlassian account | Atlassian Support

Scripted REST API code

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

// implement resource here

var sLog = '';

var pathParams = request.pathParams;

var operation = pathParams.operation; //'myApp_table'

var issueId = pathParams.id; //'1234'

sLog += "\n operation=" + operation;

sLog += " \n id=" + issueId;

var issueDetails = '';

issueDetails = getIssueDetails(issueId);

//sLog += '\n IssueDetails=' + issueDetails;

var issueJson = JSON.parse(issueDetails);

var issueSummary = issueJson.fields.summary;

//var issueDesc = issueJson.fields.description;

var issueDesc = issueJson.fields.description.content[0].content[0].text;

//var issueDescString = JSON.stringify(issueDesc);

sLog += "\n Issue id = " + issueJson.id;

sLog += "\n Issue description = " + issueDesc;

sLog += "\n issueSummary = " + issueSummary;

gs.log(sLog, 'jiraint');

//Get Issue details from Jira and create an incident in ServiceNow

if (operation.indexOf('JiraIssueCreation') > -1) {

createIncident(issueId, issueSummary, issueDesc);

}

function createIncident(issueId, issueSummary, issueDesc) {

var grInc = new GlideRecord('incident');

grInc.initialize();

grInc.short_description = issueSummary;

grInc.description = issueDesc;

grInc.correlation_id = issueId;

grInc.correlation_display = 'jira';

grInc.insert();

}

function getIssueDetails(issueID) {

try {

var r = new sn_ws.RESTMessageV2('JiraIntegrationEndpoint', 'Get Issue Details');

// r.setStringParameterNoEscape('issueID', 'SE-23');

r.setStringParameterNoEscape('issueID', issueID);

//override authentication profile

//authentication type ='basic'/ 'oauth2'

//r.setAuthenticationProfile(authentication type, profile name);

//set a MID server name if one wants to run the message on MID

//r.setMIDServer('MY_MID_SERVER');

//if the message is configured to communicate through ECC queue, either

//by setting a MID server or calling executeAsync, one needs to set skip_sensor

//to true. Otherwise, one may get an intermittent error that the response body is null

//r.setEccParameter('skip_sensor', true);

var response = r.execute();

var responseBody = response.getBody();

var httpStatus = response.getStatusCode();

} catch (ex) {

var message = ex.message;

}

return responseBody;

//return JSON.stringify(request.body.data) ; //gs.log(JSON.stringify(request.body.data));

}

})(request, response);

Youtube link : https://youtu.be/bZT1LYSIomI

View original source

https://www.servicenow.com/community/now-platform-articles/jira-to-servicenow-integration-scripted-rest-api-jira-webhook/ta-p/2315749