0% found this document useful (0 votes)
14K views7 pages

JIRA Final Code - Jatin

The document describes a process that handles different JIRA webhook events by updating related records in ServiceNow. It checks the webhook event type and performs appropriate actions like updating Request Item records when a sprint starts or closes in JIRA, attaching files to related ServiceNow tasks when issues are updated in JIRA, and creating new ServiceNow tasks when issues are created in JIRA.

Uploaded by

kripansh1
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14K views7 pages

JIRA Final Code - Jatin

The document describes a process that handles different JIRA webhook events by updating related records in ServiceNow. It checks the webhook event type and performs appropriate actions like updating Request Item records when a sprint starts or closes in JIRA, attaching files to related ServiceNow tasks when issues are updated in JIRA, and creating new ServiceNow tasks when issues are created in JIRA.

Uploaded by

kripansh1
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 7

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

var requestBody = request.body;

var requestString = requestBody.dataString;

gs.log('requestString >> ' + requestString , 'AMJIRA');

var parser = new JSONParser();

var responseObject = {};

responseObject = parser.parse(requestString);

//Check webhook event

// useCase#1 - update RITM to ACTIVE when a FUTURE sprint changed to ACTIVE in


JIRA i.e. Sprint Started

if (responseObject.webhookEvent == 'sprint_started') {

var grReqItem = new GlideRecord('sc_req_item');

grReqItem.addQuery('u_sprint_id', responseObject.sprint.id.toString());

grReqItem.query();

while (grReqItem.next()) {

grReqItem.state = '2'; // set state to work in progress

grReqItem.u_sprint_state = 'ACTIVE';

grReqItem.u_sprint_delivery_date =
getDeliveryDate(responseObject.sprint.endDate);

grReqItem.update();

// useCase#2 - update RITM to CLOSED Complete when sprint is closed.

} else if(responseObject.webhookEvent == 'sprint_closed') {

var grItem = new GlideRecord('sc_req_item');


grItem.addQuery('u_sprint_id', responseObject.sprint.id.toString());

grItem.query();

while (grItem.next()) {

grItem.state = '3'; // set state to closed

grItem.u_sprint_state = 'CLOSED';

grItem.stage = '';

grItem.update();

// useCase#3 - update RITM to WIP or Pending when sprint assigned in JIRA


is ACTIVE or FUTURE

} else if (responseObject.webhookEvent == 'jira:issue_updated') {

//gs.log('inside firstif','AMJIRA');

if (responseObject.issue.fields.attachment.length > 0 &&


responseObject.issue.fields.summary != '' && responseObject.issue.fields.summary != undefined &&
responseObject.issue.fields.summary != null && responseObject.issue.fields.summary != 'null'
&&(responseObject.issue.fields.summary.toLowerCase().indexOf('production')>-1)) {

//gs.log('inside if success','AMJIRA');

var taskcorrID = responseObject.issue.key;

var grtask = new GlideRecord('sc_task');

grtask.addQuery('correlation_id', taskcorrID);

grtask.query();

if (grtask.next()) {

//gs.log('inside gr.next','AMJIRA');

for(var
i=0;i<responseObject.issue.fields.attachment.length;i++){

var gratt = new GlideRecord('sys_attachment');

gratt.addQuery('table_name', 'sc_task');

gratt.addQuery('table_sys_id', grtask.sys_id);

gratt.addQuery('file_name',
responseObject.issue.fields.attachment[i].filename);

gratt.query();

if (gratt.next()) {
//gs.log('attach exists','AMJIRA');

else{

//gs.log('new attachment loop','AMJIRA');

//var attachmentMessage = new


sn_ws.RESTMessageV2();

var attachmentMessage = new


sn_ws.RESTMessageV2('Jira New','GET');

attachmentMessage.setRequestHeader("Accept","application/json");

attachmentMessage.setRequestHeader('Content-Type', 'application/json');

//var user = ‘ABC’;

//var password = ‘xxxxxx’;

//attachmentMessage.setBasicAuth(user,password);

attachmentMessage.setHttpMethod("get");

attachmentMessage.setEndpoint(responseObject.issue.fields.attachment[i].content);

attachmentMessage.saveResponseBodyAsAttachment('sc_task',grtask.sys_id,
responseObject.issue.fields.attachment[i].filename);

var response2 = attachmentMessage.execute();

var ritmID = responseObject.issue.fields.customfield_11144;

ritmID = ritmID.split(':');

var itemID = ritmID[1];


var gr = new GlideRecord('sc_req_item');

gr.addQuery('sys_id', itemID);

gr.query();

if (gr.next()) {

// update assignee from JIRA User Story to RITM

if (responseObject.issue.fields.assignee != '' &&


responseObject.issue.fields.assignee != undefined && responseObject.issue.fields.assignee != null
&& responseObject.issue.fields.assignee != 'null') {

var jiraAssignee =
responseObject.issue.fields.assignee.displayName;

if (jiraAssignee != '' && jiraAssignee != null && jiraAssignee


!= 'null' && jiraAssignee != undefined) {

gr.u_jira_assignee = jiraAssignee;

} else {

gr.u_jira_assignee = '';

// update Sprint information in RITM

if (responseObject.issue.fields.customfield_10004 != '' &&


responseObject.issue.fields.customfield_10004 != null &&
responseObject.issue.fields.customfield_10004 != 'null') {

var sprintName = [];

var sprintState = [];

var sprintID = [];

var sprintDeliveryDate = [];

var string =
responseObject.issue.fields.customfield_10004.toString();
var arr = string.split('[');

var subArr = arr[1].split(',');

sprintID = subArr[0].split('=');

sprintState = subArr[2].split('=');

sprintName = subArr[3].split('=');

sprintDeliveryDate = subArr[5].split('=');

gr.u_sprint_name = sprintName[1];

gr.u_sprint_state = sprintState[1];

gr.u_sprint_id = sprintID[1];

gr.u_sprint_delivery_date =
getDeliveryDate(sprintDeliveryDate[1]);

if (sprintState[1] == 'ACTIVE') {

gr.state = '2'; // set state to work in progress

} else {

gr.state = '-5'; // set state to pending

} else {

gr.u_sprint_name = '';

gr.u_sprint_state = '';

gr.u_sprint_delivery_date = '';

gr.u_sprint_id = '';

gr.state = '-5'; // set state to pending

gr.update();

}
else if (responseObject.webhookEvent == 'jira:issue_created') {

var corrID = responseObject.issue.fields.parent.key;

var grCorr = new GlideRecord('sc_req_item');

grCorr.addQuery('correlation_id', corrID);

grCorr.query();

if (grCorr.next()) {

//insert sc_task

if (responseObject.issue.fields.summary != '' &&


responseObject.issue.fields.summary != undefined && responseObject.issue.fields.summary != null
&& responseObject.issue.fields.summary != 'null'
&&(responseObject.issue.fields.summary.toLowerCase().indexOf('production')>-1)) {

var grInser=new GlideRecord('sc_task');

grInser.initialize();

grInser.short_description=responseObject.issue.fields.summary;

grInser.correlation_id = responseObject.issue.key;

grInser.request_item=grCorr.sys_id;

grInser.insert();

//New Code

/*else if (responseObject.webhookEvent == 'jira:issue_updated') {

gs.log('second if','AMJIRA');

var taskcorrID = responseObject.issue.key;

var grtask = new GlideRecord('sc_task');

grtask.addQuery('correlation_id', taskcorrID);

grtask.query();
if (grtask.next()) {

for(var i=0;i<responseObject.issue.fields.attachment.length;i++){

var attachmentMessage = new sn_ws.RESTMessageV2();

attachmentMessage.setHttpMethod("get");

attachmentMessage.setEndpoint(responseObject.issue.fields.attachment[i].content);

attachmentMessage.saveResponseBodyAsAttachment('sc_task',grtask.sys_id,
responseObject.issue.fields.attachment[i].filename);

var response2 = attachmentMessage.execute();

}*/

//new code end

})(request, response);

function getDeliveryDate(sprintDate) {

var gd = new GlideDateTime();

gd.setValue(sprintDate.toString());

return gd.getDate();

You might also like